我的问题很简单,但我似乎找不到答案。
我有以下代码:
var hiddenCountryOptions = $("#HiddenCountryDropdownId option");
当我加载页面时,这段代码是否只执行一次?或者每次我使用变量时都会执行jquery代码?
谢谢
我的问题很简单,但我似乎找不到答案。
我有以下代码:
var hiddenCountryOptions = $("#HiddenCountryDropdownId option");
当我加载页面时,这段代码是否只执行一次?或者每次我使用变量时都会执行jquery代码?
谢谢
就一次。$("#HiddenCountryDropdownId option")
是一个函数,一旦它运行并返回它的值,该值就会存储在变量中hiddenCountryOptions
。因此,任何时候您引用hiddenCountryOptions
,您都将访问由$("#HiddenCountryDropdownId option")
. 这不是 jQuery 特有的,而是 javascript 的一个基本特性。
右边的操作数(赋值运算符的右边)只执行一次。仅仅因为它是一个函数调用,它返回一个对象。该返回值(对象)被分配给变量......或者至少正在分配对该对象的引用。
ECMA 规范对此非常清楚,当然,以自己的方式):
产生式 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')));
此处创建的关闭器正在传递 2 个 DOM 引用(包装在 jQ 对象中)。这样,每次调用somFunctionWithElements
函数时都不会遍历 DOM...
$("#HiddenCountryDropdownId option");
是对 jquery 函数的调用,因此它将执行并返回一个引用,该引用将存储在 hiddenCountryOptions 变量中。
只有一次。如果您想向自己证明...您会看到即使在另一a
堂课之后,仍然只有 2 个:http adivs
:
//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