Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript/jQuery中运行函数之前检查元素是否存在是否更有效?_Javascript_Design Patterns - Fatal编程技术网

在Javascript/jQuery中运行函数之前检查元素是否存在是否更有效?

在Javascript/jQuery中运行函数之前检查元素是否存在是否更有效?,javascript,design-patterns,Javascript,Design Patterns,加载到站点的脚本上的两个示例函数: function doSomething() { var a, b, c; var el = document.querySelectorAll('#container p'); if (el.length === 0) { return false; } a = 10; b = 20; c = a+b; for (var i = 0; i < el.length; i

加载到站点的脚本上的两个示例函数:

function doSomething() {
    var a, b, c;
    var el = document.querySelectorAll('#container p');

    if (el.length === 0) {
        return false;
    }

    a = 10;
    b = 20;
    c = a+b;

    for (var i = 0; i < el.length; i++) {
        console.log(el)
        el[i].style.marginTop = a+b+i+'px';
    }
}

doSomething();


function doSomethingElse() {
    var a, b, c;
    var el = document.querySelectorAll('#container p');

    a = 10;
    b = 20;
    c = a+b;

    for (var i = 0; i < el.length; i++) {
        el[i].style.marginTop = a+b+i+'px';
    }
}

if (document.querySelectorAll('#container p').length) {
    doSomethingElse();
}
函数doSomething(){
变量a、b、c;
var el=document.queryselectoral(“#容器p”);
如果(el.length==0){
返回false;
}
a=10;
b=20;
c=a+b;
对于(变量i=0;i
两个问题:

  • 如果
    #container
    不存在,这两个容器会占用浏览器资源吗?例如;变量是否会被分配、存储在内存中,是否会进行任何计算,等等

  • 如果上述情况属实,这两种方法之间是否有任何区别?当一个人检查函数何时运行时,另一个人检查之前

  • 我想这还没有被问过,至少我找不到。我想这是一个常见的问题。我问的更多的是原理,而不是作为示例给出的确切代码,更重要的是更大/复杂的函数


    谢谢。

    我可能会使用doSomething()函数,因为使用doSomethingElse()时,您会选择两次
    #container p
    ,因此浏览器必须找到它两次,这可能会影响性能


    至于检查它是否存在,这几乎没有影响,因为for循环无论如何都不会对空数组执行任何操作(因为0不小于0)。

    您担心mirco优化,但使用jQuery?即使没有jQuery的开销,任何差异都是微不足道的。其实这更多的是出于原则,而jQuery只是一个诚实的例子。如果我改成香草口味会有帮助吗?虽然我没有否定你的观点:)更新并删除jQuery。原理取决于你正在比较的确切代码。因此,删除jQuery后,问题在于额外的DOM选择(假设找到元素)是否值得。和所有这些问题一样,你应该通过测试找出答案。不同浏览器和版本的结果可能不同。也就是说,如果您想做尽可能少的工作,我会选择第二个,进行DOM选择,将结果存储到变量中,检查其长度,如果找到元素,则将其传递给函数。这样,您正好有1个DOM选择,并且可能没有……函数调用。然而,正如我在第一条评论中所说的,这里的任何差异都是微不足道的,除非这段代码每秒运行数千次。取消那个函数调用不会有什么不同。我会选择更干净、更易维护的,并寻找更好的优化方法,比如抛弃jQuery。