0

我的问题很简单,但我似乎找不到答案。

我有以下代码:

var hiddenCountryOptions = $("#HiddenCountryDropdownId option");

当我加载页面时,这段代码是否只执行一次?或者每次我使用变量时都会执行jquery代码?

谢谢

4

4 回答 4

4

就一次。$("#HiddenCountryDropdownId option")是一个函数,一旦它运行并返回它的值,该值就会存储在变量中hiddenCountryOptions。因此,任何时候您引用hiddenCountryOptions,您都将访问由$("#HiddenCountryDropdownId option"). 这不是 jQuery 特有的,而是 javascript 的一个基本特性。

于 2013-06-20T11:33:20.487 回答
3

右边的操作数(赋值运算符的右边)只执行一次。仅仅因为它是一个函数调用,它返回一个对象。该返回值(对象)被分配给变量......或者至少正在分配对该对象的引用。

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...

于 2013-06-20T11:34:00.207 回答
0
$("#HiddenCountryDropdownId option");

是对 jquery 函数的调用,因此它将执行并返回一个引用,该引用将存储在 hiddenCountryOptions 变量中。

于 2013-06-20T11:34:40.633 回答
0

只有一次。如果您想向自己证明...您会看到即使在另一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
于 2013-06-20T11:37:38.193 回答