js如何减少作用域查找

发布时间:2022-03-16 13:59:17 作者:小新
来源:亿速云 阅读:123

这篇文章主要为大家展示了“js如何减少作用域查找”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何减少作用域查找”这篇文章吧。

减少作用域查找

(1)不要让代码暴露在全局作用域下

例如以下运行在全局作用域的代码:

<script>     var map = document.querySelector("#my-map");     map.style.height = "600px"; </script>

有时候你需要在页面直接写一个 script,要注意在一个 script  标签里面,代码的上下文都是全局作用域的,由于全局作用域比较复杂,查找比较慢。例如上面的 map 变量,第二行在使用的时候,需要在全局作用域查找一下这个变量,假设  map 是在一个循环里面使用,那可能就会有效率问题了。所以应该要把它搞成一个局部的作用域:

<script> !function(){     var map = document.querySelector("#my-map");     map.style.height = "600px"; }() </script>

上面用了一个 function 制造一个局部作用域,也可以用 ES6 的块级作用域。由于 map  这个变量直接在当前的局部作用域命中了,所以就不用再往上一级的作用域(这里是全局作用域)查找了,而局部作用域的查找是很快的。同时直接在全局作用域定义变量,会污染  window 对象。

(2)不要滥用闭包

闭包的作用在于可以让子级作用域使用它父级作用域的变量,同时这些变量在不同的闭包是不可见的。这样就导致了在查找某个变量的时候,如果当前作用域找不到,就得往它的父级作用域查找,一级一级地往上直到找到了,或者到了全局作用域还没找到。因此如果闭包嵌套得越深,那么变量查找的时间就越长。如下:

function getResult(count){     count++;     function process(){         var factor = 2;         return count * factor - 5;     }     return process(); }

上面的代码定义了一个 process 函数,在这个函数里面 count 变量的查找时间要高于局部的 factor 变量。其实这里不太适合用闭包,可以直接把  count 传给 process:

function getResult(count){     count++;     function process(count){         var factor = 2;         return count * factor - 5;     }     return process(count); }

这样 count 的查找时间就和 factor  一样,都是在当前作用域直接命中。这个就启示我们如果某个全局变量需要频繁地被使用的时候,可以用一个局部变量缓存一下,如下:

var url = ""; if(window.location.protocal === "https:"){     url = "wss://xxx.com" + window.location.pathname + window.location.search; }

频繁地使用了 window.location 对象,所以可以先把它缓存一下:

var url = ""; var location = window.location; if(location.protocal === "https:"){     url = "wss://xxx.com" + location.pathname + location.search; }

搞成了一个局变变量,这样查找就会明显快于全局的查找,代码也可以写少一点。

以上是“js如何减少作用域查找”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. js中变量的作用域
  2. JS作用域链怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js

上一篇:js如何按强类型风格写代码

下一篇:js如何避免==的使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》