Ali*_*ami 6 javascript node.js ecmascript-6
我已经更新了我Node.Js进入version 7.6.0和运行谷歌浏览器version 57.0的另一方面.
当我运行这段javascript代码时,我得到两个不同的结果,如下所示:
'use strict'
var obj = {
id: "awesome",
cool: function coolFn() {
console.log(this.id);
}
};
var id = "not awesome";
obj.cool(); //awsome
setTimeout(obj.cool, 100);Run Code Online (Sandbox Code Playgroud)
铬的结果:
awesome
not awesome
Run Code Online (Sandbox Code Playgroud)
node.js上的结果:
awesome
undefined
Run Code Online (Sandbox Code Playgroud)
记录到https://nodejs.org/en/docs/es6/我甚至使用了--harmony标志,但node.js的结果没有改变.
当节点运行你的文件时,它被视为一个模块,文档说它有效地包装:
(function (exports, require, module, __filename, __dirname) {
// Your module code actually lives in here
});
Run Code Online (Sandbox Code Playgroud)
这意味着它var id = "not awesome";在该模块包装器中作用域,并且不作为全局对象上的属性创建.
当计时器触发时,this设置为全局对象.所以在浏览器中,在var id全局范围内,您可以看到它,而在节点中,它是undefined.
如果我们将代码包装在浏览器中的函数中,您会看到相同的结果:
(function() {
'use strict'
var obj = {
id: "awesome",
cool: function coolFn() {
console.log(this.id);
}
};
var id = "not awesome";
obj.cool(); //awsome
setTimeout(obj.cool, 100);
})();Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |