我直接上代码吧
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=x
在x = paginButton.index($(this));
之前。2 、在 JS 所有对象类型的变量都是一个引用,其中保存的不是具体的那个对象,而是一个指针,指向实际保存的对象。
x = paginButton.index($(this));
意思是x
指向后面生成的那一个对象。a = x;
让a
和x
指向了同一个对象。然后
x = new Object
这样x
指向了新的对象,而a
还是原来的值。如果先执行
a=x;
a
和x
都指向了初始的那个对象,然后x = paginButton.index($(this));
x
指向了新的对象。可是a
还是指向原来的对象。但是,如果
newArr
。先执行,
a=newArr
这样,a
和newArr
指向了同一个对象。然后给
newArr
指向的对象添加值(而不是让newArr
指向新的值),也就是给a
指向的对象添加值(它们指向同一个对象)。