JavaScript一个很奇怪的问题

查看:97
本文介绍了JavaScript一个很奇怪的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我直接上代码吧

var paginButton = $('#pagination a');
var x;
function foo() {
    paginButton.click(function(){
        x = paginButton.index($(this));
    });
    return x
}
a = foo();

点击了按钮之后,我在控制台console.log(a)提示的是undefined

于是这样试了试

var newArr = [];
function foo() {
    paginButton.click(function(){
        var $index = paginButton.index($(this));
        newArr.push($index)
    });
    return newArr;
}
a = foo();

同样的我点击了几个按钮之后,在控制台console.log(a),但是这次给我输入了一个数组,
为什么第一种是underfined,而第二次没毛病

解决方案

不奇怪呀,你要好好理解一下什么是引用。
为了方便说明,假设第一段代码x初始化为{"0":0}

1、 JS是单线程,代码执行不会从一段代码突然打断,跳转到另一端代码去执行。
paginButton.click(...)的意思是定义一个函数,其代码是xxx,并且绑定为事件处理函数。所以执行代码foo()的时候,x = paginButton.index($(this)); 这一句并不会执行。 而上面这段代码还没有执行完,不会突然跳转到这个实践处理函数,所以a = foo();a=x先执行。
等这段代码执行完了,在点击,出发事件处理函数的执行,才执行x = paginButton.index($(this));

所以,a=xx = paginButton.index($(this));之前。

2 、在 JS 所有对象类型的变量都是一个引用,其中保存的不是具体的那个对象,而是一个指针,指向实际保存的对象。

x = paginButton.index($(this)); 意思是x指向后面生成的那一个对象。
a = x;ax 指向了同一个对象。
然后 x = new Object 这样x 指向了新的对象,而a还是原来的值。

如果先执行a=x; ax 都指向了初始的那个对象,然后x = paginButton.index($(this)); x 指向了新的对象。可是a还是指向原来的对象。

但是,如果 newArr
先执行,a=newArr 这样,anewArr 指向了同一个对象。
然后给newArr指向的对象添加值(而不是让newArr指向新的值),也就是给a指向的对象添加值(它们指向同一个对象)。

var x = {"0":1};
var a = x;
x[0] = 2;
a[0]; // 2
x = new Object();
x[0] = 3;
a[0]; // 2

这篇关于JavaScript一个很奇怪的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆