浏览器与独立 JS 文件运行同一代码,输出为何不同?

浏览器与独立 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 文件运行同一代码,输出为何不同?的详细内容,更多请关注www.sxiaw.com其它相关文章!