变量——珠峰视频笔记

变量提升:
当栈内存(作用域)形成,js代码自上而下执行前,浏览器会先把所有带 var和 function关键字进行提前声明或定义,这种预先处理机制称为“变量提升”
=> 声明(declare) => var a (默认值 undefined)
=> 定义(defined) => a = 12 (即“赋值”)
var:只声明 未定义
function:声明和赋值都完成

变量提升 => 只发生在当前作用域
开始加载页面的时候,只对全局作用域下的进行提升,因为此时 function中存储的都只是字符串而已,并未执行
在全局作用域下声明的变量或函数是“全局变量”,同理,在私有作用域下声明的变量是“私有变量”[带 var/function才是声明]

私有作用域(私有栈内存)
形参赋值
变量提升
代码执行

在ES3/ES5语法规范中,只有全局作用域和函数执行的私有作用域(栈内存),其他大括号不会形成栈内存

【全局变量与 window的关系】
在全局作用域下声明一个变量,相当于也给 window全局对象设置了一个属性,变量值就是属性值(私有作用域中声明的私有变量和 window没有关系)(在变量提升阶段即进行)
全局变量和 window中的属性存在“映射机制”,即全局变量变化,window中对应的属性值也变化,反之亦然
key in object 判断一个属性是否属于对象(声明一个变量不赋值时,输出 undefined,而 window.一个不存在的属性时,也是输出 undefined)

【创建变量 带var 与 不带var】
a = 12 (不加 var) => window.a = 12
=> 不是声明赋值,而是给 window设置一个属性 a,其本质是 window的属性,而不是变量
=> 当在使用 a时,先检测是否为变量,再检测是否是 window的属性,如果不是变量,而是 window的属性,则 a被视为 window.a的简写
var a = 12, b = 13; => b带 var
var a = b = 12; => b不带 var
【私有作用域 带var 与 不带var】
=> 带 var的变量在变量提升阶段都被声明为私有变量,和外界没有任何关系
=> 不带 var的变量不是私有变量,而是向上级作用域查找,看是否为上级作用域的变量,如果不是则继续查找,直至 window位置(这种查找机制叫做“作用域链”)
(如果 window中还是没有,则视为 window的属性)
在这里插入图片描述

(!!图片侵删!!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值