用Javascript理解内部函数

Rol*_*wal 1 javascript

我最近开始学习Javascript,同时使用此代码中的代码进行一些实验:

var k = {
    ab: "hi",
    func: function() {
        console.log("inner1" + this.ab);
        (function() {
            console.log("inner2 " + this.ab)
        }())
    }
};
k.func();
Run Code Online (Sandbox Code Playgroud)

这段代码给我的结果是"inner1 hi"和"inner2 undefined".

我没有得到它undefined的第二个原因console.log

Ry-*_*Ry- 7

this当你调用它,这取决于你怎么称呼它的功能就必然.将其称为值而不是属性 - (expression)()而不是object.method()- 将导致this设置为全局对象或undefined严格模式.

函数对象有两种方法,用明确指定的函数调用函数this:callapply.你可以在这里使用前者.

(function() {
    console.log("inner2 " + this.ab);
}.call(this));
Run Code Online (Sandbox Code Playgroud)

这会将调用函数转发this给内部函数.

或者,您可以只分配this给变量.

var that = this;

(function() {
    console.log("inner2 " + that.ab);
}());
Run Code Online (Sandbox Code Playgroud)