我这里有一些简单的代码,它们是在Quokka和NodeJS的Visual Studio Code中运行的。
var str = "hello"
function printStr(){
console.log(this.str);
}
printStr();
输出:
undefined at this.str quokka.js:6:4
我可以在Web浏览器中很好地运行此代码,并且可以正常工作,并打印出“ hello”。
“使用严格”;未启用
答案 0 :(得分:1)
在这种情况下,在浏览器中,this
将被解释为窗口对象,并且变量str
将在窗口中定义。 Node中没有窗口对象。目前尚不清楚为什么在这里完全使用this
而不是使用常规作用域规则。这将在浏览器和Node中都可以使用:
var str = "hello"
function printStr(){
console.log(str); // will see outside scope
}
printStr();
更好的是,将值传递给函数,以使其不依赖于超出其范围定义的值:
var str = "hello"
function printStr(s){
console.log(s);
}
printStr(str);
在Node中有一个global
对象,它与浏览器的window
对象有一些相似之处,因此像这样的代码 可以在Node中工作,但这是相当合理的非标准方式:
global.str = "hello"
function printStr(){
console.log(this.str)
}
printStr();
答案 1 :(得分:0)
在function
this
内部通常引用window
对象,并且变量str
未在窗口上定义。
您可以简单地称呼它
var str = "hello"
function printStr(){
console.log(str);
}
printStr();
答案 2 :(得分:0)
我希望mi的答案会有所帮助。节点JS中未定义对象' this ',因为元素 window 不存在,并且您没有在使用任何对象,构造函数或类。
例如:
var Animal = function(kind) {
this.name = "NN"
this.kind = kind
};
Animal.prototype.printName = function() {console.log(this.name)};
Animal.prototype.setName = function(name){this.name = name}
var a1 = new Animal("Lion");
var a2 = new Animal("Cat");
a1.setName("Robert");
a2.setName("Alex");
a1.printName();
a2.printName();
使用句子 this 时,请查看代码。如有疑问,请给我写信! (是)