在Javascript中理解此函数的内部功能
我最近开始学习Javascript,同时对代码中的代码进行了一些实验:在Javascript中理解此函数的内部功能,javascript,Javascript,我最近开始学习Javascript,同时对代码中的代码进行了一些实验: var k = { ab: "hi", func: function() { console.log("inner1" + this.ab); (function() { console.log("inner2 " + this.ab) }()) } }; k.func(); 这段代码给出了inner1 hi和inner2 un
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + this.ab)
}())
}
};
k.func();
这段代码给出了inner1 hi和inner2 undefined的结果
我不明白为什么它在second console.log中没有定义 调用函数时会绑定此函数,具体取决于调用方式。将其作为值而不是属性调用–表达式而不是object.method–将导致将其设置为全局对象,或在严格模式下未定义
函数对象上有两个方法使用显式指定的this:和调用函数。你可以在这里使用前者
(function() {
console.log("inner2 " + this.ab);
}.call(this));
调用函数时会绑定此函数的值,具体取决于调用方式。将其作为值而不是属性调用–表达式而不是object.method–将导致将其设置为全局对象,或在严格模式下未定义
函数对象上有两个方法使用显式指定的this:和调用函数。你可以在这里使用前者
(function() {
console.log("inner2 " + this.ab);
}.call(this));
执行匿名函数将更改实例,以持久化上下文:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + this.ab)
}.bind(this).call())
}
};
k.func();
执行匿名函数将更改实例,以持久化上下文:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + this.ab)
}.bind(this).call())
}
};
k.func();
对于在第二个函数中使用此函数,您没有任何参考。相反,您可以使用:
(function() {
console.log("inner2 " + this.ab)
}.call(this))
对于在第二个函数中使用此函数,您没有任何参考。相反,您可以使用:
(function() {
console.log("inner2 " + this.ab)
}.call(this))
@minitech和@Issac很好地解释了问题和解决方案。在任何级别获取属性的另一种方法是按对象。在您的代码中,它是:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + k.ab)
}())
}
};
k.func();
@minitech和@Issac很好地解释了问题和解决方案。在任何级别获取属性的另一种方法是按对象。在您的代码中,它是:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + k.ab)
}())
}
};
k.func();
在您的示例中,“this”表示基于范围的两种不同的内容。您可以使用此示例代码。也许这会帮助你了解基本知识
var k = {
ab: "hi",
func: function() {
var me = this; // save 'meaning of this' in variable me.
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + me.ab)
}())
}
};
k.func();
在您的示例中,“this”表示基于范围的两种不同的内容。您可以使用此示例代码。也许这会帮助你了解基本知识
var k = {
ab: "hi",
func: function() {
var me = this; // save 'meaning of this' in variable me.
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + me.ab)
}())
}
};
k.func();
内部的功能,称为IIFE,将window作为上下文,但您尚未在..内的window objectfunction中定义ab,被称为IIFE,将window作为上下文,但您没有在window对象中定义ab,不传递任何要调用的内容有点多余;你可以这么做,就这样。如果是为了清晰起见……也许可以将其分配给某个对象。不传递任何东西来调用有点多余;你可以这么做,就这样。如果是为了清晰起见…也许可以把它分配到某个地方。谢谢你的回答,这真的很有帮助。谢谢你的回答,这真的很有帮助。