function foo() {
var a = 2;
this.bar();
}
function bar() {
console.log( this.a );
}
foo(); //undefined
这段代码在chrome控制台执行的时候,不会报错,是可以执行的。
但是在node环境中,是直接报错“TypeError: this.bar is not a function”。
请问,这种情况该如何有效的理解?
function foo() {
var a = 2;
this.bar();
}
function bar() {
console.log( this.a );
}
foo(); //undefined
这段代码在chrome控制台执行的时候,不会报错,是可以执行的。
但是在node环境中,是直接报错“TypeError: this.bar is not a function”。
请问,这种情况该如何有效的理解?
function foo() {
var a = 2;
this.bar();
}
function bar() {
console.log( this.a );
}
实际为:
window.foo = function() {
var a = 2;
window.bar();
}
window.bar = function() {
console.log( window.a );
}
function foo() {
var a = 2;
this.bar();
}
function bar() {
console.log( this.a );
}
实际为:
function foo() {
var a = 2;
global.bar();
}
function bar() {
console.log( global.a );
}
解释如下:
全局中的this指向的是module.exports
在函数中this指向的是global对象
具体请查看链接
说个毛线 如果node默认严格模式还要 'use strict' 干嘛, this指向 严格模式和普通模式是有区别的
node运行一下两段代码比较一下或许可以帮你:
'use strict'
function fn() {
console.log(this === global)
console.log(this) // this 是 undefined
}
let obj = {name: 'obj'}
fn()
fn.call(obj)
// 'use strict'
function fn() {
console.log(this === global) // true false
}
let obj = {name: 'obj'}
fn()
fn.call(obj)
严格模式报错能是这报错?TypeError: this.bar is not a function
node 默认是严格? 给我一个学习
的机会 文档给我附上来
this
在node中
全局this 指向module.exports
函数体内this
指向 global
俩者并非同一个对象 可以亲自测试一下
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
确实不是严格模式的问题,之前回答有误
经过测试,题主代码运行在非严格模块内才会产生题主所说的错误提示。
此时this指向的是module.exports,在函数内定义的未导出的function都不会挂载在module.exports上