知不知道最新的url参数获取的API?
核心 API:URLSearchParams现代浏览器原生支持的查询参数处理标准接口
基础使用示例:
123456// 从当前URL获取参数const params = new URLSearchParams(window.location.search);// 获取单个参数值const name
...
执行上下文中有个作用域链,当查找一个变量时会顺着这个链找。
函数的作用域在函数定义的时候就决定了。这是因为函数对象有个内部属性[[scope]]
函数的生命周期分为:函数创建 和 函数调用。
函数创建的时候,会把其所处执行上下文的作用域链直接赋值给函数的内部属性[[scope]]
(这就是词法作用域的原理了),函数调用的时候会创建自己的执行上下文,并把自己的AO
和[[scope]]
合并成新的作用域链:
假设要实现动态作用域的话,
[[scope]]
就得在调用时去执行上下文栈的上一帧去取。
1 | Scope = [AO].concat([[scope]]); |
本质上闭包就是为了拓展查找自由变量的范围
MDN 对闭包的定义为:
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment)
一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。
1 | function init() { |
name 是 displayName 函数所处环境中的变量,它们一起构成了闭包。而闭包的实现依赖于执行上下文中的作用域链。
上面这个例子有点平平无奇了,让我们看一个神奇一点的例子: