JS 作用域 DAY47

JS 语法(静态)作用域(Lexical scope)

//语法作用域
function callName(){
    var chicken = '小鸡'
    console.log(chicken);
}
callName();
//读不到
console.log(chicken);

https://ithelp.ithome.com.tw/upload/images/20201013/20123039drv8jItynC.jpg
会发现外层读不到内层所宣告的 chicken
是因为 JS 的作用域在函式(function)内
所以在内层宣告变数
外层当然是读不到啦~~


作用域又分成两种
https://ithelp.ithome.com.tw/upload/images/20201013/20123039ilEIdQAIrI.jpg

静态(语法)作用域
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();

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon07.gif


<<:  Day37. 原型模式

>>:  (32)试着学 Hexo-番外篇之更新 Hexo

Day07:Swift 基础语法-Struct 与 Class 的差异

前言 前面两篇文章学习了 Struct 和 Class, 两者用法相同、功能相似, 都可以用来储存 ...

[day22] 快速产生测试资料

功能测试时很常需要删掉坏掉的资料库纪录,这时就需要重置测资,但每次都开管理工具来做太麻烦了,写个小工...

网路是怎样连接的(十二)IP地址怎麽看

思考重点 如何看懂IP代表的意思 子网内的设备可以被直接访问吗 网路设定中的255.255.255....

【在 iOS 开发路上的大小事-Day20】透过 Firebase 来管理使用者 (Sign in with Facebook 篇) Part2

昨天我们已经完成了 Sign in with Facebook 的前置作业了,今天我们要来将功能实作...

Day 22.5 | Livewire 实作 购物网站: 建立资料表

本来预计都写在 Day22 的,但是加上本篇内容後会让一天的篇幅太长,且考虑到有些夥伴可能没有建立资...