技术经验分享:javascriptvar的理解

简介: 技术经验分享:javascriptvar的理解

"

认识var必须了解

1. var的作用是声明当前作用域下的变量。

2. V8引擎在解释JS代码时做了两个动作,

  一是从头到尾抽出所有变量和函数并赋初值 ;

  二是再来一遍给变量运算赋值(引用);

3. 在做第一遍动作时,所有标识符指向undefined ,函数指向函数本身。

4. 参数是一种运算。

5. 局部作用域内没有时找时到向外找,直到找到为止,否则undefined。

var a = 1;

function //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM2ODcwNA==.html

fn1() {

console.log(a);

var a = 2;

}

fn1(); // undefined

console.log(a); //1

解释器的第一次操作

找到变量a,赋值为undefined

函数fn1 初值就是本身也就是 fn1={console.log(a);var a =2};

解释器的第二次操作

变量a赋初值,a指向1

当发生函数调用时,fn1是一个新的作用域,重复以上的解释步骤

找到变量a,赋值为undefined

所以在执行函数fn1()的console.log(a)时 a的值为undefined

而fn1()下面的console.log(a)里面的a是全局变量

下面例子也证明了解释器的工作步骤

var a //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjgyMjI4MA==.html

= 1;

function fn1() {

console.log(a);

a = 2;

}

fn1(); // 1

console.log(a); // 2

fn1函数里面在解释时,没有a这个变量,于是向上查找 找到全局变量 var a =1

于是fn1里面a就变成了全局变量,进行运算,于是最后函数外的console.log()打印出来的结果就是2

1 var a = 1;

2 function fn1(a) {

3 console.log(a);

4 a = 2;

5

6 }

7

8 fn1(a); //结果为1

9 console.log(a);//结果为1

同样,第一次操作动作 抽取 了 a 和 fn1 , 第二次操作动作赋值,当遇到函数调用时,继续执行前两个动作

找到了 参数 a并赋上初值undefined fn1 传入参数a 这里的a是全局变量var a = 1,参数也是一种运算,相当于是给参数a赋值了1

于是函数内部的console.log(a)打印出1

第4行的a指向参数,是函数范围内的变量,进行 a =2的计算后,函数内的局部变量a的值为2

第9行的console.log(a) 中的a 为全局变量,打印出来的结果为1。


"
image.png
相关文章
|
3月前
|
Web App开发 人工智能 Java
技术经验分享:affineCipherandafineHacker
技术经验分享:affineCipherandafineHacker
26 2
|
16天前
|
Java 关系型数据库 API
后端开发之道:从新手到专家的蜕变之旅
在数字化时代的浪潮中,后端开发如同一座桥梁,连接着数据世界的每一个角落。本文将带领读者踏上一段从零基础到精通后端开发的旅程,探索编程语言的选择、框架的应用、数据库的设计以及API的开发等关键知识点。我们将以通俗易懂的语言,结合条理清晰的结构,逐步揭开后端开发的神秘面纱,让每一位读者都能在这段旅途中找到属于自己的位置和方向。
|
1月前
|
算法 程序员
技术之路:从新手到大师的演变之旅
【8月更文挑战第16天】在技术的浩瀚海洋中,每一个程序员都是一位航行者。本文将带您领略一位技术人员的成长历程,从最初的摸索到成为领域专家的过程。我们将探讨如何通过不断学习和实践,克服挑战,提升技能,并实现个人职业生涯的飞跃。
26 1
|
1月前
|
缓存 运维 容灾
入行5年,谈谈我在阿里做测试开发的经验
作者在阿里一直从事测试开发相关工作,这几年学习很多、收获很多,作者希望给还在该方向摸爬滚打的同学一些启发和方向。
|
1月前
|
机器学习/深度学习 人工智能 算法
技术成长之路:从新手到专家的心路历程
【8月更文挑战第9天】在技术的世界里,每个人都是从零开始。本文将通过个人经历,探讨如何在技术的海洋中不断学习和成长,最终成为领域内的专家。我们将一起回顾那些挑战与成就,以及它们如何塑造了一个技术人员的职业轨迹。
|
3月前
技术经验分享:comparisonmethodviolates必现
技术经验分享:comparisonmethodviolates必现
14 0
技术经验分享:comparisonmethodviolates必现
|
3月前
|
应用服务中间件 PHP nginx
技术经验分享:fastcgimain
技术经验分享:fastcgimain
|
3月前
|
存储 缓存 NoSQL
技术经验分享:braum的使用
技术经验分享:braum的使用
18 0
|
3月前
技术经验分享:Jacobi
程序技术好文:爬取梨视频网站详细过程
19 0
|
3月前
|
移动开发 HTML5
技术经验分享:CQUOJ9766ChillyWilly
技术经验分享:CQUOJ9766ChillyWilly
16 0