代码解析至少分两步

1):查找var,function参数例如下面这个例子

a= 未定义

fn1={alert(2)}函数的话,是整个整体

2):逐行读代码:类似=+-%*等都是表达式,表达式可以改变值

example1:

<script>

alert(a)   //最终结果:undefiner

var a=1

function fn1(){

alert(alert(2));

}

</script>

example2:

alert(a)         //4

var a=1

alert(a)       //1

function a(){alert(2)}

alert(a)      //1

var a=3;

alert(a)     //3

function a(){alert(4)}

alert(a)   //3

//分析;

1):查找var  function 参数,,重名时只会留下有值的,这里第一个是undefine,所以踢掉,若都有值,那么谁后执行就留下谁

a=3(最后留下来的值)

2):

example3:

var a=1;

function fn1(){

alert(a);

var a=2

}

fn1();//undefine

alert(a)//a=1

步骤1:

1):查找var function 参数

a=undefine

fn1=function fn1(){

alert(a);

var a=2

}

步骤2

a=1

fn1=function fn1(){

alert(a);

var a=2

}

遇到里函数调用,函数内部的解析:函数内部查找var function参数

1,a=undefine

逐行运行函数内部的东西

alert出来是个 undefine

a=2;这里的a是局部变量

步骤3,a=1;这里的a是要全局变量

example4:

var a=1;

function fn1(){

alert(a);//1

a=2

}

fn1()

alert(a)//2

步骤1;解析

a=undefine

fn1=function fn1(){

alert(a)

a=2}

步骤2:逐行读代码

a=1

步骤3

函数内部:空,,函数内部逐行读代码:从子级作用域找,

步骤4:得到值

example5:

var a=1

function fn1(a){

alert(a);

a=2;

}

fn1(a);//1

alert(a);//1

js作用域学习的更多相关文章

  1. JS基础学习——作用域

    JS基础学习--作用域 什么是作用域 变量的作用域就是变量能被访问到的代码范围,比如在下面的这个js代码中,变量a的作用域就是函数foo,因此在全局作用域内的console.log(a)语句不能访问到 ...

  2. Javascript作用域学习笔记(三)

    看完<你不知道的javascript>上,对作用域的新的理解(2018-9-25更) 一.学习笔记:   1.javascript中的作用域和作用域链 +  每个函数在被调用时都会创建一个 ...

  3. js需要学习的

    1.js作用域 2.html5和css3 3.js面向对象 4.js原生ajax 5.js与后端交互 6.html5手机移动端页面练习 7.jquery中的jQuery UI框架和jQuery Eas ...

  4. JS基础学习——闭包

    JS基础学习--闭包 什么是闭包 闭包的定义如下,它的意思是闭包使得函数可以记住和访问它的词法范围,即使函数是在它声明的词法范围外执行.更简单来讲,函数为了自己能够正确执行,它对自己的词法范围产生闭包 ...

  5. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  6. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  7. JS作用域面试题总结

    关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...

  8. js入门学习~ 运动应用小例

    要实现的效果如下: 鼠标移入各个小方块,实现对应的效果(变宽,变高,移入透明,移出恢复)~~ (且各运动相互之前不干扰)  主要是练习多个物体的运动框架~~ --------------------- ...

  9. js作用域问题

    <script type="text/javascript"> alert(i);//Uncaught ReferenceError: i is not defined ...

随机推荐

  1. Java_动态加载类(英文)

    It is possible to load and reload classes at runtime in Java, though it is not as straightforward as ...

  2. php 小试 mysql-zmq-plugin 和 pthreads

    原文: http://my.oschina.net/neochen/blog/294354 https://github.com/netkiller/mysql-zmq-plugin 有2张表: 表1 ...

  3. linux文件创建、查看、编辑命令

    一.创建文件命令 1.touch命令 linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件.touch   [-acm][-r   ref ...

  4. 用c#实现$.now()(1437813924915)的时间效果

    Convert.ToInt64((DateTime.UtcNow - Convert.ToDateTime("1970-01-01")).TotalMilliseconds)

  5. Mobile data

    1.Consume REST web services from app 2.De-serialize JSON into an in-memory object collection 3.Save ...

  6. java实现MD5加密

    mport java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Creat ...

  7. mysqlbinglog基于即时点还原

    mysqlbinlog介绍 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径. (mysql5. ...

  8. Spark RDD Operations(2)

    处理数据类型为Value型的Transformation算子可以根据RDD变换算子的输入分区与输出分区关系分为以下几种类型. 1)输入分区与输出分区一对一型. 2)输入分区与输出分区多对一型. 3)输 ...

  9. MVC VS2012 Code First 数据库迁移教程

    1.在“服务资源管理器”连接数据库 2.打开工具-Nuget程序包管理器“程序包管理器控制台” 3.控制台输入命令:PM> Enable-Migrations -StartUpProjectNa ...

  10. ZK 代码自动提示

    1.设置xsd 打开eclipse,Window-Preference,进行如下设置: 2.创建zul文件 (1)打开File—New—Other窗口,新建XML File文件: (2)选择新建文件所 ...