标签: use-strict

JavaScript中使用"严格"做什么,背后的原因是什么?

最近,我通过Crockford的JSLint运行了一些我的JavaScript代码,它给出了以下错误:

第1行问题1:缺少"使用严格"声明.

做一些搜索,我意识到有些人会加入"use strict";他们的JavaScript代码.一旦我添加了语句,错误就会停止显示.不幸的是,谷歌没有透露这个字符串声明背后的历史.当然它必须与浏览器如何解释JavaScript有关,但我不知道效果会是什么.

那么它是"use strict";什么,它意味着什么,它是否仍然相关?

当前的任何浏览器都会响应"use strict";字符串还是将来使用?

javascript syntax jslint use-strict

7339
推荐指数
29
解决办法
105万
查看次数

如何在Node.js中解释'use strict'语句?

我已经开始探索Node.js并编写了许多演示Web应用程序,以了解Node.js,Express.js,jade等的流程.

但最近我遇到的一件事是声明"use strict"作为每个函数和每个.js文件中的第一行.

Node.js究竟是如何解释的?

javascript use-strict node.js

178
推荐指数
1
解决办法
13万
查看次数

使用严格时,为什么匿名函数中的"this"未定义?

在严格模式下使用javascript时,为什么这个匿名函数未定义?我理解为什么这可能有意义,但我找不到任何具体的答案.

例:

(function () {
    "use strict";

    this.foo = "bar"; // *this* is undefined, why?
}());
Run Code Online (Sandbox Code Playgroud)

小提琴测试:http://jsfiddle.net/Pyr5g/1/ 查看记录器(firebug).

javascript anonymous-function use-strict

81
推荐指数
3
解决办法
3万
查看次数

JS中"使用严格"的好处

除了"use strict"防止错误编码之外,还有哪些额外的好处?例如,它是否允许脚本运行得更快,因为解释器知道它的优化代码?

javascript use-strict

53
推荐指数
2
解决办法
9198
查看次数

如何删除babel添加的全局"use strict"

我正在使用"使用严格"的函数形式,并且不希望Babel在翻译后添加的全局形式.问题是我使用的是一些没有使用"use strict"模式的库,并且在脚本连接后可能会抛出错误

javascript use-strict jshint babeljs

48
推荐指数
7
解决办法
4万
查看次数

当启用use strict时,如何在JavaScript中找到调用函数?

use strict启用时是否可以看到函数的被调用者/调用者?

'use strict';

function jamie (){
    console.info(arguments.callee.caller.name);
    //this will output the below error
    //uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
};

function jiminyCricket (){
   jamie();
}

jiminyCricket ();
Run Code Online (Sandbox Code Playgroud)

javascript use-strict

41
推荐指数
4
解决办法
3万
查看次数

是否需要"使用严格"的Python编译器?

存在用于Python的静态分析工具,但编译时间检查往往与Python所包含的运行时绑定哲学截然相反.这可能与一个静态分析工具来执行一些"包装标准Python解释器使用严格 "般的约束,但我们没有看到任何广泛采用的这样的事情.

有没有关于Python的东西会使"使用严格"的行为变得不必要或特别不受欢迎?

或者,Perl中的"使用严格"行为是否已被广泛采用?

注意:"必要"是指"实际必要",并非绝对必要.显然你可以在没有"use strict"的情况下编写Perl,但是(从我所见过的)大多数Perl程序员都会使用它.

注意:Python解释器包装器不需要 "使用严格"类似的约束 - 您可以使用类似于"use strict"的伪编译指示,这将被普通解释器忽略.我不是在谈论添加语言级功能.


更新:解释Perl每条评论中"use strict"的作用.(官方文档链接在第一段.)

"use strict"指令有三个不同的组件,其中只有两个非常有趣:

  • use strict vars:在程序中静态检查词法范围的变量用法.(请记住,在Python中,基本上只有global范围和local范围).许多Python短信检查这种事情.因为它是他们可以做的唯一的静态分析,所以直言不讳地假设你使用简单的词汇范围,并在你告诉他们闭嘴之前警告你那些看似错误的东西; 即

    FOO = 12
    foo += 3
    
    Run Code Online (Sandbox Code Playgroud)

    如果您没有对命名空间做任何想法,那么检查拼写错误就很有用.

  • use strict refs:防止符号命名空间解除引用.Python最接近的模拟是使用locals()globals()进行符号绑定和标识符查找.

  • use strict subs:在Python中没有真正的模拟.

python compiler-construction perl static-analysis use-strict

30
推荐指数
6
解决办法
1万
查看次数

AngularJS控制器和"使用严格"

我最近开始使用JSHint,它要求我使用"use strict"的函数形式.从那以后,AngularJS抛出一个错误:

"错误:参数'webAddressController'不是函数,未定义"

当我删除"use strict"的函数形式时,控制器加载正常.

控制器:

(function () {
    "use strict";

    function webAddressController($scope, $rootScope, web_address_service) {
             // Do things
    }

}());
Run Code Online (Sandbox Code Playgroud)

有没有人对这里发生的事情有任何见解?

use-strict jshint angularjs

28
推荐指数
2
解决办法
6万
查看次数

Javascript/jsLint:当使用"use strict"时,用什么替换jQuery(this);

当我用jslint验证以下代码时,我得到以下错误.

function displayMegaDropDown() {
"use strict";
var liMegaPosition, divMegaOffset;
liMegaPosition = jQuery(this).position();
divMegaOffset = { top: liMegaPosition.top + jQuery(this).height(), left: liMegaPosition.left };
jQuery(this).find("div").offset(divMegaOffset);

jQuery(this).addClass("hovering");
}
Run Code Online (Sandbox Code Playgroud)

第4行字符29处的问题:严格违规.

 liMegaPosition = jQuery(this).position();  
Run Code Online (Sandbox Code Playgroud)

第5行的问题56:严格违规.

divMegaOffset = { top: liMegaPosition.top + jQuery(this).height(), left: liM...
Run Code Online (Sandbox Code Playgroud)

第6行第12个问题:严格违规.

jQuery(this).find("div").offset(divMegaOffset);
Run Code Online (Sandbox Code Playgroud)

第8行第12个问题:严格违规.

jQuery(this).addClass("hovering");
Run Code Online (Sandbox Code Playgroud)

我猜这是因为使用了jQuery(这个),但我不明白要用什么替换它.请注意,这不是因为jQuery未声明为全局.

javascript jquery jslint use-strict

23
推荐指数
1
解决办法
4728
查看次数

使用use strict时引号的类型是否重要?

我想知道,因为我试图用use strict,它的问题,如果我一起去"use strict"还是'use strict'

这些都是"更正确"的选择吗?

javascript jslint use-strict

19
推荐指数
1
解决办法
2235
查看次数