Потому что нужно экранировать спец символы, иначе браузер будет себя вести как в вашем случае. Вот символы которые надо подставить вместо <, >: ">"; и "<";
Потому что браузер не выполняет JS: он только ищет открывающий и закрывающий теги и отдаёт то, что между ними движку JS. Проще всего обойти так: var str = "<script><\/script>"