JS 语法(静态)作用域(Lexical scope)
//语法作用域function callName(){ var chicken = '小鸡' console.log(chicken);}callName();//读不到console.log(chicken);
会发现外层读不到内层所宣告的 chicken
是因为 JS 的作用域在函式(function)内
所以在内层宣告变数
外层当然是读不到啦~~
作用域又分成两种
静态(语法)作用域
Def:
变数的作用域在语法解析时,就已经确定作用域,且不会再改变
也就是在撰写函式时 作用域就已经确定
JS属于 静态作用域
动态作用域
Def:
变数的作用域在函式调用时才决定
除此之外 JS的作用域是一层一层向内
若 作用域内有用到变数
但作用域却没有此变数
则会向外查找
若向外查找也没有(以下图 会去全域找)
则会出现 ReferenceError : 变数 is not defined
//全域// fn1作用域 独立function fn1(){}// fn2作用域 独立function fn2(){}
这里举一个例子
var num = 1;function fn1(){ //静态作用域: 1 //动态作用域: 10 console.log(num);}function fn2(){ var num = 10; fn1();}fn2();
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷