燕十八老师 JS高级学习笔记 之作用域链
作用域 在JS中,函数嵌套是非常普遍的,在函数嵌套中:对变量是如何寻找的? 答: 首先在函数内寻找,寻找不到,则在外层寻找 ...直到..全局(window)区域。
// 例子1var c=5;function t1() {var d=6;function t2() {var e=7;alert(c+d+e); //18}t2();}t1();
// 例子2var c=5;function t1() {var d=6;function t2() {var e=7;var d=3;alert(c+d+e); //15}t2();}t1();
对var的理解:
var的作用:声明变量。 var 是在函数运行的上下文中声明一个变量。如果不加var 仅仅是一个赋值操作 但不要狭隘地理解为声明了一个变量。
alert(window.d); //undefined ------->window全局中没有d变量alert(window.e); //undefinedfunction t() {d=5; //------------>变量不加var 仅仅是一个赋值操作var e=6;}t();alert(window.d); //5alert(window.e); //undefined
function t1() {var d;function t2() {d=5; //---->仅仅是一个赋值操作e=6;}t2();}t1();console.log(window.e); // 6console.log(window.d); // undefinedconsole.log(d); //Uncaught ReferenceError: d is not defined
注意:以window.xxx引用全局变量,如果寻找不到,是作为某个属性不存在 返回undefined 如果直接以xxx引用全局变量 如果找不到 则会报错:Uncaught ReferenceError: xxx is not defined
作用域考试:这是一个极容易出错 但是有很基础的JS面试题
// 例子1// =============================================var str1='global';function t1() {console.log(str1); //globalconsole.log(str2); //Uncaught ReferenceError: str2 is not definedstr2='local';}t1();
分析: console.log(str1)执行时,在t1内寻找str1找不到 于是往外找,在window上寻找到str1 打印global; console.log(str2)执行时,在t1内寻找str2找不到 于是往外找 在window寻找str2 没有 于是报str2 is not defined错误 至于str2='local',根本执行不到这里
// 例子2// ==================================================var str1='global';function t1() {console.log(str1); //globalconsole.log(str2); //undefinedvar str2='local';}t1();
以下该知识点非常重要!********** JS代码的执行自上而下没有问题 但是JS代码在整理运行分为: 词法分析期和运行期 自上而下执行之前,先有一个“词法分析过程”! 以上面例2为例: 第1步:先分析t1函数 t1内部有局部变量str2 注意此时只是有分析出来,代码还没运行,函数未执行 故还没有赋值 第2步:执行t1函数console.log(str1); //globalconsole.log(str2); //undefinedvar str2='local'; 此时str2的值为local因此光知道作用域链的概念还不够,还要知道词法分析
燕十八老师 JS高级学习笔记 之作用域链相关推荐
- 燕十八老师JS高级之词法分析笔记
词法分析 分析什么? 按顺序3样东西 1.先分析参数 2.再分析变量声明 3.分析函数声明 一个函数能使用的局部变量,就从上面的3步分析而来 具体步骤: 1.在函数运行的前的瞬间,会生成Active ...
- 燕十八PHP公益课堂学习笔记
<?php /**** 燕十八 公益PHP讲堂论 坛: http://www.zixue.it 微 博: http://weibo.com/Yshiba YY频道: 88354001 ****/ ...
- 燕十八ajax笔记,燕十八php視频教程笔记(PHP基础部分).doc
燕十八php視频教程笔记(PHP基础部分) 001-开学典礼 002-变量概念及命名规范 <?php //?$a?是钥匙[107房间],?房间里的内容是值, /* echo?$a,?什么过程? ...
- 学习笔记1..燕十八老师公益课堂
2019独角兽企业重金招聘Python工程师标准>>> 1:show create table thread的结果 2:.php文件中,的 set names 信息. 3:网页的me ...
- JS高级——函数执行、作用域链内存结构图
一.JavaScript的执行过程 假如我们有下面一段代码,它在JavaScript中是如何被执行的呢? 1.1 第一步:初始化全局对象 js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Glo ...
- 燕十八老师高级JS之this详解 学习笔记
JS中的this到底是谁? JS非常灵活 PHP中指的是当前对象 JS中函数的四种调用方式 1.作为普通的函数来调用时 this的值 指向window,准确地说 this为NULL 但被解释成wind ...
- 燕十八老师高级JS之arguments详解
arguments是什么? 答:是1个对象 是一个长的很很像数组的对象 arguments内容是什么? 答:是函数运行时的实参列表 (function (d,e,f){console.log(argu ...
- 燕十八mysql笔记_学习笔记2..燕十八老师公益课堂
mysql_insert_id 返回表中auto_increment列刚刚产生的最大值,插入后要立即调用该函数,否则 可能得到意外的结果 表中必须有auto_increment列才能调用,否则只返回0 ...
- MySQL燕十八老师课程笔记:第十六课:MySQL各个函数
# 在给商品打八八折的基础上抹掉零头 select goods_id,goods_name,floor(shop_price*0.88) from goods where cat_id=4; # 给每 ...
最新文章
- REM+SVG Sprite,web app案例
- Poj(1703),种类并查集
- webService——学习(3):使用JDK开发webService
- 八.利用springAMQP实现异步消息队列的日志管理
- C++ decltype关键字
- 计算机道德 英语作文,公共道德英语作文
- android sdk版本升级,个推 Android SDK 老版本升级2.9.+
- java实现复原IP地址,回溯算法:复原IP地址
- 【习题 7-2 UVA-225】Golygons
- 克罗谈投资策略04_感觉与现实
- 静态文件用什么服务器配置,静态文件服务器路径怎么配置好
- ong拼音汉字_汉语拼音ang-ong(教案)
- coreldraw x5安装视频教程_免费史上最全的EndNote视频教程
- 爬取斗鱼主播名字和热度
- 拍乐云携手UCloud,共建云的美好时代
- [TIM] 微信登录TIM生产QQ号【并独立使用】
- oracle查看列属性,oracle查询列属性
- 三菱plc pwm指令_三菱电机PLC学习:高速指令
- 【06月04日】A股滚动市盈率PE历史新低排名
- 微型计算机海关编码是,海关HS编码对照表..doc