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=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
指向的对象添加值(它们指向同一个对象)。
var x = {"0":1};
var a = x;
x[0] = 2;
a[0]; // 2
x = new Object();
x[0] = 3;
a[0]; // 2
这篇关于JavaScript一个很奇怪的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!