资讯专栏INFORMATION COLUMN

JS作用域

ASCH / 2630人阅读

摘要:作用域作用读写域空间范围区域解析器全局变量全局函数。自上而下函数域局部变量局部函数。中使用,自己未定义,在中定义的变量,会报错中使用,中定义的变量,可以使用。由里而外没有块级作用域的概念,会解析里边的。并添加到当前环境中。

作用域
作用:读、写
域:空间、范围、区域
----JS解析器-----

script 全局变量、全局函数。【自上而下】
函数域 局部变量、局部函数。【自里而外】

1)JS的预解析

找一些东西 【var function 参数】
1、var a = 1;
找到 var a,设置成 a = undefined。不读取后边的 = 1。
【所有的变量,在正式运行代码之前,都赋值一个值,undefined】
2、fn1 = function fn1() { alert(2); }
【所有的函数,在正式运行代码之前,都是整个函数块,不运行里边的内容】

**预解析机制
遇到重名的:只留一个,留下不留上。变量和函数重名,不论上下,留函数。

2)逐行解读代码
1、alert(a); //undefined
因为JS的预解析中,var a = undefined。
【开始解读代码,从JS的预解析中去找】
2、var a = 1; //通过表达式将a变成1
表达式: = - + * / % ++ -- ! 参数
【能改变值得都是表达式,表达式能修改预解析的值】
3、function fn1(){} //函数,没被调用,不会执行内部代码


//script 自上而下,执行完script1,再执行script2。
//script1中使用,自己未定义,在script2中定义的变量,会报错
//script2中使用,script1中定义的变量,可以使用。

1、script预解析【var function 参数】
var a = undefined
function fn1(){}
2、逐行解读代码
var a = 1; //表达式
function fn1(){} //不执行
fn1() //函数调用
2.1 预解析 【var function 参数】
2.2逐行解读代码
3、继续逐行解读全局代码

function(){} //运行由里到外
作用域链
子级作用域(函数)没有找到 【var function 参数】,回到父级作用域找到【var function 参数】
逐行解析代码,执行表达式会更改 父级【var function 参数】内容

子级作用域(函数)找到【参数】,进行预解析 = var 参数(局部变量)

1、有传参的情况下,会默认在子级函数作用域,解析 var a = undefined
2、逐行解读代码
var = 参数 //执行表达式,不传参就是undefined
alert(a) //1 先在当前作用域找a,如果有就直接使用,如果没有就去父级作用域找。【由里而外】

JS没有块级作用域的概念,会解析if(){} for(){}里边的var。并添加到当前环境中。不会被销毁
FF不能对if(){}, for(){} 里边function进行预解析,兼容性

在子级作用域中,使用匿名变量,会加载到全局作用域中。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99830.html

相关文章

  • js闭包的本质

    摘要:也正因为这个闭包的特性,闭包函数可以让父函数的数据一直驻留在内存中保存,从而这也是后来模块化的基础。只有闭包函数,可以让它的父函数作用域永恒,像全局作用域,一直在内存中存在。的本质就是如此,每个模块文件就是一个大闭包。 为什么会有闭包 js之所以会有闭包,是因为js不同于其他规范的语言,js允许一个函数中再嵌套子函数,正是因为这种允许函数嵌套,导致js出现了所谓闭包。 function...

    qianfeng 评论0 收藏0
  • JavaScript之变量及作用

    摘要:所以的作用域是静态作用域,也叫词法作用域。总结是一门基于词法作用域静态作用域的语言,会沿着作用域链像气泡一样向外部寻找变量声明。又是函数作用域的语言,在中,使用和关键字后,能让变量处于块作用域中,而且不存在声明提升。 本文共 1700 字,读完只需 7 分钟 概述 变量,编程语言中我们用来模拟现实概念的工具,比方说,变量可以表示对象,数组,数字,字符。既然是工具,那么就用工具的适用范围...

    Faremax 评论0 收藏0
  • Js基础知识(三) - 作用与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    lemanli 评论0 收藏0
  • Js基础知识(三) - 作用与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    XFLY 评论0 收藏0
  • Js基础知识(三) - 作用与闭包

    摘要:是词法作用域工作模式。使用可以将变量绑定在所在的任意作用域中通常是内部,也就是说为其声明的变量隐式的劫持了所在的块级作用域。 作用域与闭包 如何用js创建10个button标签,点击每个按钮时打印按钮对应的序号? 看到上述问题,如果你能看出来这个问题实质上是考对作用域的理解,那么恭喜你,这篇文章你可以不用看了,说明你对作用域已经理解的很透彻了,但是如果你看不出来这是一道考作用域的题目,...

    tanglijun 评论0 收藏0

发表评论

0条评论

ASCH

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<