我的问题非常简单,但我似乎无法找到答案。
我有以下代码:
var hiddenCountryOptions = $("#HiddenCountryDropdownId option");
加载页面时,此代码只执行一次吗?或者每次使用变量?
时都会执行jquery代码由于
答案 0 :(得分:4)
只有一次。 $("#HiddenCountryDropdownId option")
是一个函数,一旦运行并返回它的值,该值就存储在变量hiddenCountryOptions
中。因此,只要您引用hiddenCountryOptions
,就会访问$("#HiddenCountryDropdownId option")
返回的值。这不是jQuery特有的,而是javascript的基本功能。
答案 1 :(得分:3)
右手操作数(赋值运算符的右侧)仅执行一次。只是因为它是一个函数调用,它返回一个对象。该返回值(对象)被分配给变量...或至少分配了对该对象的引用。
ECMA specification is quite clear about this,当然是以自己的方式):
生产AssignmentExpression:LeftHandSideExpression = AssignmentExpression评估如下:
让lref成为评估LeftHandSideExpression的结果。
让rref成为评估AssignmentExpression的结果 [跳过3& 4]
调用PutValue(lref,rval)。
如您所见,首先评估右手表达式,然后分配表达式的值。
这就是为什么你有时会看到这样的代码的原因:
var someFunctionWithElements = (function(elem1, elem2)
{
return function(val1, val2)
{
elem1.val(val1);
elem2.val(val2);
};
}($('#foo'), $('#bar')));
这里创建的close是传递2个DOM引用(包装在jQ对象中)。这样,每次调用somFunctionWithElements
函数时都不会追踪DOM ...
答案 2 :(得分:0)
$("#HiddenCountryDropdownId option");
是对jquery函数的调用,因此它将执行并返回一个将存储在hiddenCountryOptions变量中的引用。
答案 3 :(得分:0)
只有一次。如果你想向自己证明......你会发现即使在另一个a
课程之后,adivs
仍然只有2个:
http://jsfiddle.net/7uVuE/
HTML
<div class="a">foo</div>
<div class="a">foo</div>
<div>bar</div>
JS
adivs = $(".a");
console.log(adivs.length); //2
$("div").addClass("a");
console.log(adivs.length); //still 2