Skip to content

函数作用域问题 #6

Open
Open
@izuomeng

Description

@izuomeng

1.arguments中的函数this指向当前arguments对象,验证代码如下

var length = 10
function a() {
    console.log(this.length)
}
var obj = {
    length: 5,
    method: function(fn) {
        fn()
        arguments[0]()
    }
}
obj.method(a, 1) //10, 2

上述a在arguments调用时的this指向arguments,相当于arguments.0,因此输出的是arguments.length

2.对象中的方法如果包含立即调用的函数表达式,其作用域为全局(window)对象

var number = 2;  
var obj = {  
    number: 4,  
    fn: (function(){  
        this.number *= 2;  //这里的this指向window对象
        number = number * 2;  
        var number = 3;  
  
        return function(){  
            this.number *= 2;  
            number *= 3;  
            console.log(number);  
        }  
    })()
}; 
//结果: window.number = 4, obj.number = 4

3.函数名加括号的问题

function test() {  
    this.data = 5;  
    this.log = function() {  
        console.log(this.data);  
    }  
}  
var a = new test();  
a.log();// 5  
(a.log)();// 5  
(a.log = a.log)();// undefined  
var b = a.log;  
b();// undefined,与上面情况类似
(function(){  
    a.log();// 相当于在全局执行a.log()
})();  
setTimeout(a.log, 100)// undefined

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions