在下面的学习者代码段中,根据以下理解,在下面的foo()
调用,"bar1"
关键字绑定到全局基于this
规则和严格模式下的default binding
。
undefined
然而,在调用function foo(){
console.log(this.bar);
}
var bar = 'bar1';
var o1 = {bar: 'bar2', foo: foo};
var o2 = {bar: 'bar3', foo: foo};
foo(); // expect 'bar1' - default binding
o1.foo(); // expect 'bar2' - implicit binding
o2.foo(); // expect 'bar3' - implicit binding
时,我在控制台中获得了foo()
。 undefined
和o1.foo()
基于o2.foo()
按预期行事。在我看来,绑定正在按预期工作,但bar变量永远不会停留在全局。
我在节点6中运行了脚本
implicit binding
注意: - 在浏览器中,它给出了预期的输出。
答案 0 :(得分:2)
那是因为Node模块在它们自己的闭包中运行,所以<script type="text/javascript">
//this function must be in header tag
function hasError(argument) {
alert(argument == 'error');
}
</script>
<script src="js/tweenmax.js" onerror="hasError('error')"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" onerror="hasError('error')">
<img src="djffjds.jpg" onerror="hasError('error')">
实际上是创建一个局部变量,而不是全局变量。
节点模块基本上是这样包装的,因此它们不会在全局范围内运行。
var bar
如果您在没有function (exports, require, module, __filename, __dirname) { /*your code here*/
}
或bar = 'bar1';
的情况下执行var
,您将创建一个全局变量,并获得预期的输出。但实际上并没有在生产中这样做,它污染了全球空间。