浏览器与独立 JS 文件运行同一代码,输出为何不同?
一段代码执行时输出不同:浏览器与独立js文件差异解析
在编程中,相同的代码在不同的执行环境下可能会产生不同的结果,以下代码就是一个经典案例:
function foo() { console.log(this.a); } var a = 2; foo();
浏览器运行
在这个环境下,这段代码将会输出:
2
这是因为在浏览器的 javascript 正常模式中,this关键字默认绑定到全局对象,而全局对象中有变量 a,值为 2。
独立js文件运行
但是,当我们把这段代码保存在一个独立的 js 文件中,然后使用 node.js 命令执行时,输出结果却是:
undefined
这是因为 node.js 默认会启用严格模式(strict mode)。在严格模式下,this关键字不再默认绑定到全局对象,而是绑定到函数的执行上下文。而这个函数没有执行上下文,因此输出为 undefined。
解决方法
为了使这段代码在 node.js 下也能输出 2,我们可以手动在函数中指定 this 的绑定对象:
function foo() { console.log(this.a); } var a = 2; foo.call({ a: a });
这样,我们就明确指定了 this 绑定到 { a: a } 这个对象,从而保证输出与浏览器环境一致。
以上就是浏览器与独立 JS 文件运行同一代码,输出为何不同?的详细内容,更多请关注其它相关文章!