javascript关于自执行函数的this指向问题

varitem=10;vargame=(function(){varitem=5;varget=function(){returnthis.item;}vartest=f... var item = 10;
var game = (function() {
var item = 5;

var get = function() {
return this.item;
}

var test = function() {
var finalResult = get();
alert(finalResult);
}
return {
get: get,
test: test
}
})();
game.test();// 10

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var item = 10;
var game = (function() {
var item = 5;
var get = function() {
alert(this.item);
}
return{
get:get
}
})()
game.get();// 结果为undefined

结果为什么是这样的?能否解答一下, 谢谢!
展开
 我来答
yugi111
推荐于2016-10-05 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
<!DOCTYPE HTML>
<html>
<head>
<title>yugi</title>
<meta charset=UTF-8 />
<style type="text/css">
</style>
<script type="text/javascript" src="jquery-1.8.0.min.js">
</script>
<script type="text/javascript">
var item = 10;
var game = (function() {
    var item = 5;
    
    var get = function() {
     // 这个this取决于哪个对象调用这个get方法。
        return this.item;
    }
    
    var test = function() {
     // 这个get方法是被window调用的,属于全局的item
     // 等价于 window.get()
        var finalResult = get();
        console.debug (finalResult);
    }
    return {
        get: get,
        test: test
    }
})();
console.error (game);
// 通过调用test方法,但是test方法里面并没有声明this,故而为window,就是全局的调用,所以就是那个外面的item
game.test(); // 10 
// game对象调用get方法,this就是game,但是返回的是 {get:get,test:test},并没有所谓的item,故而为undefined
game.get();

//----------------------------------

var item = 10;
var game = (function() {
    var item = 5;
    var get = function() {
     // 哪个调用get方法,this就是哪个
        console.log (this.item);
     // 全局的item
        console.log (window.item);
        // 默认局部变量
        console.log (item);
    }
    return {
        get: get
    }
})()
console.warn (game);
// 同理,game就是{get:get},没有所谓的item,但是get方法里面是this调用,所以就是undefined
game.get(); // 结果为undefined

// 回答完毕,费心劳力,采纳即可。。。。。。。。!!!!!!!~~~~Void@@#####$$$$%%^&**(())
</script>
</head>
<body>
</body>
</html>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式