使用jquery分配javascript变量只需执行一次?

时间:2013-06-20 11:30:48

标签: javascript jquery performance

我的问题非常简单,但我似乎无法找到答案。

我有以下代码:

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

加载页面时,此代码只执行一次吗?或者每次使用变量?

时都会执行jquery代码

由于

4 个答案:

答案 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