isl*_*205 6 javascript browser node.js
浏览器和节点之间有什么区别?例如:
setName.js 在节点上:
var setName;
setName = function (name) {
return this.name = name;
};
setName("LuLu");
//LuLu
console.log(name);
//undefined
console.log(this.name);
Run Code Online (Sandbox Code Playgroud)
setName.html 在浏览器中:
<script>
var setName;
setName = function (name) {
return this.name = name;
};
setName("LuLu");
//LuLu
console.log(name);
//LuLu
console.log(this.name);
</script>
Run Code Online (Sandbox Code Playgroud)
第二个日志不同,为什么?
Node是JavaScript引擎,而不是浏览器.你undefined在Node和Lulu浏览器中看到的具体原因是什么?全局命名空间的差异:
在浏览器中,顶级范围是全局范围.这意味着在浏览器中,如果您在全局范围内
var something将定义全局变量.在Node中,这是不同的.顶级范围不是全球范围;var somethingNode模块内部将是该模块的本地模块.
在浏览器中,this是window对象的引用- 浏览器的全局命名空间 - 用于所有未附加到对象的函数(例如,不喜欢foo.bar()).在Node中,this根本不是对全局命名空间的引用.
console.log(this.name)节点解释器中的NB将打印Lulu,而不是undefined.那是因为,仅在REPL中,
> this === global
true
Run Code Online (Sandbox Code Playgroud)
进一步阅读@ 如何节点:什么是"这个?"
好了,按照提示通过一个多编辑@ SIME维达斯关于评论this中ES5严格模式:
- 在全局上下文中(在任何函数之外),
this指的是全局对象,无论是否处于严格模式.- 当
this关键字出现在函数内部时,其值取决于函数的调用方式.- 当函数作为
this对象的方法被调用时,它被设置为调用该方法的对象.
更有趣的阅读由Juriy Zaytsev(又名@kangax)在他的一篇博客文章中提供.
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |