JavaScript中给原型扩展方法时出现的[[Scopes]]属性是什么含义?
关于[[Scopes]]的含义说明
[[Scopes]]是JavaScript引擎内置的隐藏属性,不会暴露给普通JS代码调用,仅能在浏览器调试控制台等工具中查看,它的核心作用是存储对应函数的作用域链,决定了函数运行时可以访问的变量范围。
结合你的场景的具体解释:
你定义的sel方法是直接在全局作用域下声明的函数,没有嵌套在其他函数/块级作用域内部,所以它的作用域链上只有全局作用域,这就是你看到[[Scopes]]下仅有Global项的原因。
如果函数是嵌套声明的,比如外层有另一个函数包裹,那么[[Scopes]]中还会按顺序存储所有外层作用域的变量快照,这也是JS闭包能够访问外层函数变量的底层实现基础。
附测试代码整理
// 给String原型添加自定义选择器方法 String.prototype.sel = function sel() { var elem = document.querySelectorAll(this); if (elem.length == 1) return elem[0]; return elem; } // 调用示例 '[btnSend]'.sel().onclick = () => { alert('ok') } console.log(String.prototype);
<button btnSend>Send</button>
注:你第一段示例代码中写的
doc.querySelectorAll属于笔误,完整测试代码中修正为document.querySelectorAll是正确的。
内容的提问来源于stack exchange,提问作者Giulia
相关产品推荐
相关产品推荐

