作用域
作用域
执行上下文
console.log(a); // undefined
var a = 100;
fn('zhangsan') // 'zhangsan' 20
function fn(name) {
age = 20;
console.log(name, age);
var age;
}范围:一段<script>或者一个函数
全局:变量定义、函数声明
函数:变量定义、函数声明、this、arguments
注意⚠️“函数声明”和“函数表达式”的区别
fn()
function fn() {
//声明
}
fn1()
var fn1 = function () {
//表示
}
var a = 100; //类似于这个
//全局声明
console.log(a);
var a = 100;
fn('zhangsan')
function fn(name) {
console.log(this);
age = 20;
console.log(name,age);
var age;
bar(100);
function bar(num) {
console.log(num);
}
}作用域
没有块级作用域
只有函数和全局作用域
如何理解作用域
自由变量
作用域链,即自由变量的查找
闭包的两个场景
生命周期
作用范围
变量作用域
静态作用域
动态作用域
静态作用域
被称为词法作用域
由程序定义位置决定
全局作用域
x
10
foo
bar
foo作用域
-
-
bar作用域
x
20
动态作用域
程序运行时刻
栈操作
x:20
bar:
foo:
JS变量作用域
JS使用静态作用域
JS没有块级作用域(全局作用域、函数作用域)(ES5)
ES5中使用词法环境管理静态作用域
环境记录
形式参数
函数声明
变量
对外部词法环境的引用(outer)
初始化
执行
作用域链
对变量提升的理解
变量定义
函数声明(注意和函数表达式的区别)
创建10个<a>标签 点击的时候弹出来对应的序号
错误写法
正确写法
最后更新于
这有帮助吗?

