Што робіць "use strict" у JavaScript, і якія прычыны гэтага?

Нядаўна я запусціў код майго кода JavaScript праз Crockford JSLint , і ён даў наступную памылку:

Problem at line 1 character 1: Missing "use strict" statement.

Выконваючы некаторыя пошукі, я зразумеў, што некаторыя людзі дадаюць "use strict"; у свой код JavaScript. Як толькі я дадаў выраз, памылка перастала з'яўляцца. На жаль, Google не раскрыў большую частку гісторыі гэтага аператара радка. Вядома, гэта павінна быць звязана з тым, як JavaScript інтэрпрэтуецца браўзэрам, але я не ведаю, якім будзе эфект.

Такім чынам, што такое "use strict"; ўсё пра тое, што гэта мае на ўвазе, і ўсё яшчэ актуальна?

Любы з бягучых браўзэраў рэагуе на "use strict"; радок ці гэта для будучага выкарыстання?

6989
26 авг. зададзены Mark Rogers 26 жнів. 2009-08-26 19:10 '09 у 19:10 2009-08-26 19:10
@ 30 адказаў

Гэты артыкул пра Javascript Strict Mode можа вас зацікавіць: John Resig - ECMAScript 5 Strict Mode, JSON і многае іншае

Працытаваць некаторыя цікавыя часткі:

Строгі рэжым - гэта новая функцыя ў ECMAScript 5, якая дазваляе размяшчаць праграму або функцыю ў "строгай" працоўным кантэксце. Гэты строгі кантэкст прадухіляе прыняцце пэўных дзеянняў і выдае больш выключэнняў.

А таксама:

Строгі рэжым дапамагае ў некалькіх шляхах:

  • Ён ловіць некаторыя распаўсюджаныя кадавальныя bloopers, кідаючы выключэнні.
  • Ён прадухіляе ці стварае памылкі, калі прымаюцца адносна "небяспечныя" дзеянні (напрыклад, атрыманне доступу да глабальнага аб'екту).
  • Гэта адключае функцыі, якія заблытваюць ці дрэнна прадумваюцца.

Таксама зьвярніце ўвагу, што вы можаце ўжыць "строгі рэжым" да ўсім файлу ... Ці вы можаце выкарыстоўваць яго толькі для пэўнай функцыі (усё яшчэ цытуючы артыкул Джона Ресига):

 // Non-strict code... (function(){ "use strict"; // Define your library strictly... })(); // Non-strict code... 

Што можа быць карысна, калі вам трэба змяшаць стары і новы код ;-)

Такім чынам, я мяркую, што гэта трохі падобна на "use strict" вы можаце выкарыстоўваць у Perl (адсюль і назва?): Яно дапамагае вам рабіць менш памылак, выяўляючы больш рэчаў, якія могуць прывесці да паломак.

У цяперашні час ён падтрымліваецца усімі асноўнымі браўзэрамі (панэль IE 9 і ніжэй).

4587
26 авг. адказ дадзены Pascal MARTIN 26 жнів. 2009-08-26 19:15 '09 у 19:15 2009-08-26 19:15

Гэта новая асаблівасць ECMAScript 5. Джон Ресиг напісаў добрае рэзюмэ .

Гэта проста радок, якую вы змяшчаеце ў свае файлы JavaScript (альбо уверсе вашага файла, альбо ўнутры функцыі), якая выглядае так:

border=0
 "use strict"; 

Ўключэнне гэтага кода зараз не павінна выклікаць праблем з бягучымі браўзэрамі, паколькі гэта проста радок. Гэта можа выклікаць праблемы з вашым кодам у будучыні, калі ваш код парушае Прагма. Напрыклад, калі ў вас у цяперашні час ёсць foo = "bar" ня вызначаючы спачатку foo , ваш код пачне збой ... што, на мой погляд, добра.

1152
26 авг. адказ дадзены seth 26 жнів. 2009-08-26 19:14 '09 у 19:14 2009-08-26 19:14

Зацвярджэнне "use strict"; інструктуе браўзэр выкарыстоўваць рэжым Strict, які з'яўляецца паменшаным і больш бяспечным наборам функцый JavaScript.

Спіс функцый (неисчерпывающий)

  1. Забараняе глабальныя зменныя. (Прыбірае адсутныя аб'явы var і памылкі друку ў імёнах зменных)

  2. Бясшумныя няўдалыя заданні будуць выклікаць памылку ў строгім рэжыме (прызначаючы NaN = 5; )

  3. Спробы выдаліць адмоваўстойлівасці ўласцівасці будуць выклікаць ( delete Object.prototype )

  4. Патрабуе, каб усе імёны уласцівасцяў ў аб'ектным литерале былі унікальнымі ( var x = {x1: "1", x1: "2"} )

  5. Імёны функцыянальных параметраў павінны быць унікальнымі ( function sum (x, x) {...} )

  6. Forbids - васьмярковы сінтаксіс ( var x = 023; некаторыя распрацоўшчыкі памылкова мяркуюць, што папярэдні нуль не робіць нічога, каб змяніць лік.)

  7. Які забараняе with ключавым словам

  8. eval ў строгай рэжыме не ўводзіць новыя зменныя

  9. Забараніць выдаленне простых імёнаў ( delete x; )

  10. Забарона прывязкі або прысваення імёнаў eval і arguments ў любой форме

  11. Строгі рэжым не падтрымлівае ўласцівасці аб'екта arguments з фармальнымі параметрамі. (гэта значыць, у function sum (a,b) { return arguments[0] + b;} Гэта працуе, таму што arguments[0] звязаны з a і г.д.)

  12. arguments.callee не падтрымліваецца

[Спасылка: Строгі рэжым , Mozilla Developer Network]

567
25 нояб. адказ дадзены gprasant 25 лістапада. 2014-11-25 00:22 '14 у 0:22 2014/11/25 00:22

Калі людзі занепакоеныя use strict магчыма, варта праверыць гэтую артыкул:

Падтрымка ECMAScript 5 "Строгі рэжым" ў браўзэрах. Што гэта значыць?
NovoGeek.com - блог Крышны

У ім гаворыцца аб падтрымцы браўзэраў, але што яшчэ больш важна, як з гэтым справіцца:

 function isStrictMode(){ return !this; }  function isStrictMode(){ "use strict"; return !this; }  
385
16 июля '12 в 2:25 2012-07-16 02:25 адказ дадзены Jamie Hutber 16 ліпеня '12 ў 02:25 2012-07-16 02:25

Слова засцярогі, усё, што вы программируете з жорсткай зарадкай: прымяненне "use strict" да існуючага коду можа быць небяспечным! Гэтая рэч не нейкая прыемная, шчаслівая налепка, якую вы можаце папляскаць па кодзе, каб зрабіць яе "лепш". Пры "use strict" правільнай "use strict" Прагма браўзэр раптам выкідвае выключэння ў выпадковых месцах, якія ён ніколі не кідаў раней, проста таму, што ў гэтым месцы вы робіце тое, што дазваляе па змаўчанні / свабодна JavaScript, але строгі JavaScript не падабаецца ! У вас могуць быць парушэнні строгасці, якія хаваюцца ў рэдка выкарыстоўваюцца выкліках вашага кода, якія будуць генераваць выключэнне толькі тады, калі яны ў канчатковым выніку будуць запушчаны - скажам, у вытворчай асяроддзі, якую выкарыстоўваюць вашы аплатныя кліенты!

Калі вы збіраецеся зрабіць рашучы крок, рэкамендуецца ўжываць "use strict" разам з комплекснымі модульнымі тэстамі і строга сканфігураваць задачай зборкі JSHint, якая дасць вам упэўненасць у тым, што няма цёмнага кута вашага модуля, які выбухне жудасна, таму што вы ўключылі строгі рэжым. Або, эй, вось яшчэ адзін варыянт: проста не дадавайце "use strict" да любога з вашых састарэлых кодаў, гэта, верагодна, бяспечней, сумленна. Вызначана не дадавайце "use strict" для любых модуляў, якія вы не валодаеце або не падтрымліваеце, напрыклад, іншыя модулі.

Я думаю, што нават калі гэта смяротны жывот у клетцы, "use strict" можа быць добрым, але вы павінны зрабіць гэта правільна. Лепшы час, каб ісці строгім, - гэта калі ваш праект з'яўляецца новым, і вы пачынаеце з нуля. Наладзьце JSHint/JSLint з усімі папярэджаннямі і параметрамі, складзенымі так жа моцна, як ваша каманда можа ўздрыгваць, атрымаць добрую сістэму зборкі / тэставання / сцвярджэнні, якую можна наладзіць як Grunt+Karma+Chai , і толькі THEN пачне маркіраваць ўсе вашы новыя модулі як "use strict" . Будзьце гатовыя вылечыць мноства памылак і папярэджанняў. Пераканайцеся, што ўсе разумеюць гравітацыю, наладзіўшы зборку на FAIL, калі JSHint/JSLint выклікае якія-небудзь парушэнні.

Мой праект не быў новым праектам, калі я прыняў "use strict" . У выніку мая IDE поўная чырвоных адзнак, таму што ў мяне няма "use strict" на палове маіх модуляў, і JSHint скардзіцца на гэта. Гэта напамін мне пра тое, які рэфактарынг я павінен рабіць у будучыні. Мая мэта - быць чырвонай адзнакай бясплатна з-за ўсіх маіх адсутных "use strict" заяў, але гэта ўжо шмат гадоў.

193
03 марта '14 в 10:37 2014-03-03 10:37 адказ дадзены DWoldrich 03 сакавіка '14 у 10:37 2014/03/03 10:37

Выкарыстанне 'use strict'; ня робіць ваш код лепш.

Строгі рэжым JavaScript - гэта функцыя ў ECMAScript 5 . Вы можаце ўключыць строгі рэжым, абвясціўшы гэта ў верхняй частцы вашага скрыпту / функцыі.

 'use strict'; 

Калі механізм JavaScript ўбачыць гэтую дырэктыву, ён пачне інтэрпрэтаваць код у адмысловым рэжыме. У гэтым рэжыме памылкі ўзнікаюць, калі выяўляюцца пэўныя метады кадавання, якія могуць апынуцца патэнцыяльнымі памылкамі (што з'яўляецца аргументам на карысць строгага рэжыму).

Разгледзім гэты прыклад:

 var a = 365; var b = 030; 

У сваёй апантанасці, каб выбудаваць лікавыя литералы, распрацоўшчык ненаўмысна ініцыялізаваць зменную b восьмым литералом. Нястрогі рэжым будзе інтэрпрэтаваць гэта як лікавы литерал са значэннем 24 (у базе 10). Аднак строгі рэжым выкліча памылку.

Для ня вычарпальнага спісу спецыяльнасцяў ў строгім рэжыме см. Гэты адказ .


Дзе я павінен выкарыстоўваць 'use strict'; ?

  • У маім новым дадатку JavaScript Абсалютна! Строгі рэжым можна выкарыстоўваць у якасці інфарматара, калі вы робіце нешта дурное з вашым кодам.

  • У маім існуючым JavaScript-кодзе: Напэўна, не! Калі ў вашым існуючым JavaScript-кодзе ёсць інструкцыі, якія забароненыя ў строгім рэжыме, прыкладанне проста зламаецца. Калі вам патрэбны строгі рэжым, вы павінны быць гатовыя адладжваць і выпраўляць існуючы код. Вось чаму выкарыстанне 'use strict'; ня робіць ваш код лепш.


Як выкарыстоўваць строгі рэжым?

  1. Уставіць 'use strict'; у верхняй частцы вашага скрыпту:

     // File: myscript.js 'use strict'; var a = 2; .... 

    Звярніце ўвагу, што ўсё ў файле myscript.js будзе інтэрпрэтавацца ў строгім рэжыме.

  2. Або устаўце 'use strict'; зацвярджэнне зверху вашага цела функцыі:

     function doSomething() { 'use strict'; ... } 

    Усё ў лексічным аб'ёме функцыі doSomething будзе інтэрпрэтавацца ў строгім рэжыме. Тут важная лексічная вобласць слова. См. Гэты адказ для лепшага тлумачэння.


Якія рэчы забароненыя ў строгім рэжыме?

Я знайшоў добрую артыкул, якая апісвае некалькі рэчаў, якія забароненыя ў строгім рэжыме (звярніце ўвагу, што гэта не эксклюзіўны спіс):

аб'ём

Гістарычна, JavaScript быў зьбянтэжаны тым, як функцыі ахоплены. Часам яны здаюцца статычна абхопленымі, але некаторыя функцыі прымушаюць іх паводзіць сябе так, як быццам яны дынамічна ахоплены вобласцю. Гэта заблытвае, што абцяжарвае чытанне і разуменне праграм. Непаразуменне выклікае памылкі. Гэта таксама праблема прадукцыйнасці. Статычнае вызначэнне вобласці дапускала б прывязку зменнай падчас кампіляцыі, але патрабаванне для дынамічнай вобласці азначае, што прывязка павінна быць адкладзеная да часу выканання, што звязана са значным зніжэннем прадукцыйнасці.

Строгі рэжым патрабуе, каб усе прывязкі зменных выконваліся статычна. Гэта азначае, што функцыі, якія раней патрабавалі дынамічнага звязвання, павінны быць ліквідаваны або зменены. У прыватнасці, аператар with выключаецца, а здольнасць eval-функцый да ўмяшання ў сераду яго выклікае абанента строга абмежаваная.

Адным з пераваг строгага кода з'яўляецца тое, што такія інструменты, як YUI Compressor, могуць выконваць лепшую працу пры яго апрацоўцы.

Подразумеваете глабальныя зменныя

JavaScript мае на ўвазе глабальныя зменныя. Калі вы відавочна не аб'яўляеце зменную, для вас няяўна аб'яўляецца глабальная пераменная. Гэта спрашчае праграмаванне для пачаткоўцаў, таму што яны могуць грэбаваць некаторымі са сваіх асноўных гаспадарчых задач. Але гэта абцяжарвае кіраванне больш буйнымі праграмамі і значна зніжае надзейнасць. Такім чынам, у строгім рэжыме, разумеем глабальныя зменныя больш не ствараюцца. Вы павінны відавочна абвясціць усе свае зменныя.

глабальны уцечак

Ёсць цэлы шэраг сітуацый, якія могуць прывесці this быць звязана з глабальным аб'ектам. Напрыклад, калі вы забыліся даць new прэфікс пры выкліку функцыі канструктара, канструктар this будзе звязана нечакана з глабальным аб'ектам, таму замест таго, каб ініцыялізаваць новы аб'ект, то замест гэтага будзе моўчкі фальсіфікацыя з глабальнымі зменнымі. У гэтых сітуацыях строгі рэжым замест гэтага звязвае this з undefined , што прымусіць канструктар замест гэтага генераваць выключэнне, дазваляючы выявіць памылку раней.

шумная памылка

JavaScript заўсёды меў ўласцівасці толькі для чытання, але вы не маглі стварыць іх самастойна да тых часоў, Object.createProperty функцыя Object.createProperty ня Object.createProperty адкрыта для Object.createProperty функцыі. Калі вы паспрабавалі прысвоіць значэнне для ўласцівасці толькі для чытання, ён будзе трываць няўдачу. Прызначэнне не зменіць значэнне ўласцівасці, але ваша праграма будзе дзейнічаць так, як калі б яна была. Гэта небяспека цэласнасці, якая можа прывесці да пераходу праграм у непаслядоўна стан. У строгім рэжыме спроба змяніць ўласцівасць толькі для чытання выкліча выключэнне.

васьмярковы

8-разраднае прадстаўленне лікаў было надзвычай карысным пры выкананні машыннага праграмавання на машынах, памер слоў якіх быў кратным 3. Пры працы з мэйнфрэймам CDC 6600, якія маюць памер словы 60 біт, вам спатрэбілася васьмярковай. Калі б вы маглі чытаць васьмярковых, вы маглі б паглядзець на слова як на 20 лічбаў. Дзве лічбы прадстаўлялі op-код, а адна лічба ідэнтыфікавала адзін з 8 рэгістраў. Падчас павольнага пераходу ад машынных кодаў да моў высокага ўзроўню лічылася карысным забяспечыць васьмярковых формы на мовах праграмавання.

У C было абрана вельмі няўдалае ўяўленне аб октальности: вядучы нуль. Так што ў C 0100 азначае 64, а не 100, а 08 - памылка, а не 8. Яшчэ больш, на жаль, гэты анахранізм быў скапіяваны амаль на ўсе сучасныя мовы, уключаючы JavaScript, дзе ён выкарыстоўваецца толькі для стварэння памылак. Гэта не мае іншай мэты. Такім чынам, у строгім рэжыме васьмярковых формы больш не дапускаюцца.

Et cetera

Аргументы pseudo array становяцца трохі больш падобнымі на масівы ў ES5. У строгім рэжыме ён губляе ўласцівасці callee і caller . Гэта дазваляе перадаваць вашыя arguments ненадзейнаму коду, ня пакідаючы шмат канфідэнцыйнага кантэксту. Акрамя таго, ўласцівасць arguments функцый выключаецца.

У строгім рэжыме дубляваныя ключы ў литерале функцыі выдаюць сінтаксічную памылку. Функцыя can not мае два параметру з тым жа імем. Функцыя can not мае зменную з тым жа імем, што і адзін з яе параметраў. Функцыя NOT CAN delete свае ўласныя зменныя. Спроба delete неконфигурируемое ўласцівасць зараз выдае выключэнне. Прымітыўныя значэння не няяўна загорнуты.


Зарэзерваваныя словы для будучых версій JavaScript

ECMAScript 5 дадае спіс зарэзерваваных слоў. Калі вы выкарыстоўваеце іх як пераменныя або аргументы, строгі рэжым выдасць памылку. Зарэзерваваныя словы:

implements , interface , let , package , private , protected , public , static , AND yield


далейшае чытанне

144
29 янв. адказ дадзены sampathsris 29 студз. 2016-01-29 14:35 '16 У 14:35 2016/01/29 14:35

Я настойліва рэкамендую ўсім распрацоўнікам пачаць выкарыстоўваць строгі рэжым. Ёсць дастаткова браўзэраў, якія падтрымліваюць яго, што строгі рэжым законна дапаможа выратаваць нас ад памылак, якія мы нават не ведалі, былі ў вашым кодзе.

Па-відаць, на пачатковым этапе будуць памылкі, з якімі мы ніколі не сутыкаліся раней. Каб атрымаць поўную выгаду, нам трэба правесці належнае тэставанне пасля пераходу ў строгі рэжым, каб пераканацца, што мы ўсе злавілі. Вызначана, мы проста не use strict ў нашым кодзе і лічым, што памылак няма. Такім чынам, адтоку заключаецца ў тым, што яго час для пачатку выкарыстання гэтай неверагодна карыснай моўнай функцыі для напісання лепшага кода.

напрыклад,

 var person = { name : 'xyz', position : 'abc', fullname : function () { "use strict"; return this.name; } }; 

JSLint - адладчык, напісаны Дугласам Крокфордом. Проста ўстаўце ў свой скрыпт, і ён хутка скануе любыя прыкметныя праблемы і памылкі ў вашым кодзе.

128
05 июля '13 в 22:38 2013-07-05 22:38 адказ дадзены Pank 05 ліпеня '13 а 22:38 2013/07/05 22:38

Я хацеў бы прапанаваць некалькі больш абгрунтаваны адказ, які дапаўняе іншыя адказы. Я спадзяваўся адрэдагаваць самы папулярны адказ, але не змог. Я стараўся зрабіць гэта як мага больш поўным і поўным.

Для атрымання дадатковай інфармацыі вы можаце звярнуцца да дакументацыі MDN .

"use strict" дырэктыву, уведзеную ў ECMAScript 5.

Дырэктывы падобныя на сцвярджэнні, але розныя.

  • use strict не ўтрымлівае ключавых слоў: дырэктыва - гэта просты аператар выразы, які складаецца з адмысловага радковага литерала (у адзіночных або двайных двукоссі). Механізмы JavaScript, якія не рэалізуюць ECMAScript 5, проста бачаць выраз без пабочных эфектаў. Чакаецца, што будучыя версіі стандартаў ECMAScript ўкарэняць use ў якасці рэальнага ключавога слова; Такім чынам, двукоссі стануць састарэлымі.
  • use strict можа выкарыстоўвацца толькі ў пачатку скрыпту або функцыі, г.зн. павінна папярэднічаць любому іншаму (рэальнаму) сцвярджэнні. Гэта не павінна быць першай інструкцыяй ў скрыпце функцыі: ёй могуць папярэднічаць іншыя выразы аператараў, якія складаюцца з радковых литералов (і рэалізацыі JavaScript могуць разглядацца як дырэктывы, спецыфічныя для рэалізацыі). Радковыя литералы, якія ідуць за першым рэальным аператарам (у скрыпце або функцыі), з'яўляюцца простымі выразамі. Інтэрпрэтатары не павінны інтэрпрэтаваць іх як дырэктывы, і яны не маюць ніякага эфекту.

use strict дырэктыва use strict паказвае, што наступны код (у скрыпце або функцыі) з'яўляецца строгім кодам. Код на самым высокім узроўні скрыпту (код, які не знаходзіцца ў функцыі) лічыцца строгім кодам, калі скрыпт змяшчае use strict дырэктыву use strict . Змест функцыі лічыцца строгім кодам, калі сама функцыя вызначана ў строгай кодзе або калі функцыя змяшчае use strict дырэктыву use strict . Код, перадаваны метадзе eval() лічыцца строгім кодам, калі eval() выклікаецца з радковага кода або ўтрымлівае use strict дырэктыву use strict .

Строгі рэжым ECMAScript 5 з'яўляецца абмежаваным падмноствам мовы JavaScript, што ліквідуе адпаведныя недахопы мовы і забяспечвае больш строгую праверку памылак і павышаную бяспеку. Ніжэй адрозненні паміж строгім рэжымам і нармальным рэжымам (з якіх асабліва важныя першыя тры):

  • Вы не можаце выкарыстоўваць яго with -statement ў строгім рэжыме.
  • У строгім рэжыме ўсе зменныя павінны быць аб'яўлены: калі вы прысвойваеце значэнне ідэнтыфікатара, які не быў абвешчаны як зменная, функцыя, параметр функцыі, параметр catch-clause або ўласцівасць глабальнага Object , тады вы атрымаеце ReferenceError . У нармальным рэжыме ідэнтыфікатар аб'яўляецца няяўна як глабальная пераменная (як ўласцівасць глабальнага Object )
  • У строгім рэжыме ключавое слова this мае значэнне undefined функцыі, якія былі выклікацца як функцыі (а не як метады). (В нормальном режиме this всегда указывает на глобальный Object ). Это различие можно использовать для проверки, поддерживает ли реализация строгий режим:
 var hasStrictMode = (function() { "use strict"; return this===undefined }()); 
  • Также, когда функция вызывается с call() или apply в строгом режиме, this точно значение первого аргумента call() или apply() . (В нормальном режиме null и undefined заменяются глобальным Object а значения, которые не являются объектами, преобразуются в объекты.)

  • В строгом режиме вы получите TypeError , когда вы пытаетесь назначить свойства readonly или определить новые свойства для не растяжимого объекта. (В обычном режиме оба просто обходятся без сообщения об ошибке.)

  • В строгом режиме при передаче кода в eval() вы не можете объявлять или определять переменные или функции в области вызывающего (как это можно сделать в обычном режиме). Вместо этого для eval() создается новая область, и переменные и функции находятся в пределах этой области. Эта область уничтожается после того, как eval() завершает выполнение.
  • В строгом режиме аргумент-объект функции содержит статическую копию значений, которые передаются этой функции. В нормальном режиме аргумент-объект имеет несколько "магическое" поведение: элементы массива и именованные функциональные параметры ссылаются на одно и то же значение.
  • В строгом режиме вы получите SyntaxError когда за оператором delete следует неквалифицированный идентификатор (переменная, функция или параметр функции). В нормальном режиме выражение delete ничего не сделает и будет оценено как false .
  • В строгом режиме вы получите TypeError при попытке удалить неконфигурируемое свойство. (В обычном режиме попытка просто терпит неудачу, а выражение delete - false ).
  • В строгом режиме это считается синтаксической ошибкой при попытке определить несколько свойств с тем же именем для литерала объекта. (В нормальном режиме ошибки нет.)
  • В строгом режиме это считается синтаксической ошибкой, когда объявление функции имеет несколько параметров с тем же именем. (В нормальном режиме ошибки нет.)
  • В строгом режиме не допускаются восьмеричные литералы (это литералы, начинающиеся с 0x . (В нормальном режиме некоторые реализации позволяют делать восьмеричные литералы).
  • В строгом режиме идентификаторы eval и arguments обрабатываются как ключевые слова. Вы не можете изменить их значение, не можете присвоить им значение, и вы не можете использовать их в качестве имен для переменных, функций, параметров функций или идентификаторов блока catch.
  • В строгом режиме больше ограничений на возможности проверки стека вызовов. arguments.caller и arguments.callee вызывают TypeError в функции в строгом режиме. Кроме того, некоторые свойства caller- и аргументы функций в строгом режиме вызывают TypeError при попытке их прочитать.
88
ответ дан Ely 15 мая '15 в 9:58 2015-05-15 09:58