作用域

1、js中没有块级作用域

2、如果有块级作用域,那么下面代码将会是undefined undefined

<script>
for (var i = 0; i < 10; i++) {
var num = i;
}
console.log(i);//10
console.log(num);//9
</script>

词法作用域

1、就是在代码写好的那一刻,变量的作用域就已经确定了,这种作用域,就是所谓的词法作用域

2、和词法作用域相对的叫动态作用域 ,js中是词法作用域不是动态作用域

3、在JS中唯一能产生作用域的是函数

<script>
//代码写好的那一刻,变量的作用域就已经确定了
//作用域要么在函数中,要么在全局,因为没有块级作用域
var x = 100; function f() {
alert(x);
} function f1() {
var x = 1;
f();
} function f2() {
x = 1;
f();
} f1();//100
f2();//1 </script>

在写下代码的那一刻作用域就确定了,f()函数中的x,永远会去找全局变量中x

词法作用域规则

1、函数允许访问函数外的数据

2、整个代码结构中只有函数可以限定作用域

3、作用域规则首先使用提升规则分析

4、如果当前作用域中有了该变量, 就不考虑外面的同名变量

参考:https://www.cnblogs.com/foodoir/p/5977950.html

JS高级——词法作用域的更多相关文章

  1. JS教程:词法作用域和闭包 (网络资源)

    varclassA = function(){ ; } classA.prototype.func1 = function(){ var that = this, ; function a(){ re ...

  2. JS的词法作用域

    词法作用域定义实现的规则: 1 函数作用域实在定义的时候决定的,而不是在执行时候决定 2 为了实现这种词法作用域,函数内部不仅包含函数代码逻辑,还必须引用当前的作用域链. 3 函数对象可以通过作用域链 ...

  3. 第十八篇 js高级知识---作用域链

    一直有想法去写写js方面的东西,我个人是最喜欢js这门语言,喜欢的他的自由和强大,虽然作为脚本语言有很多限制的地方,但也不失为一个好的语言,尤其是在H5出现之后.下面开始说说js的方面的东西,由于自己 ...

  4. 读书笔记-你不知道的JS上-词法作用域

    JS引擎 编译与执行 Javascript引擎会在词法分析和代码生成阶段对运行性能进行优化,包含对冗余元素进行优化(例如对语句在不影响结果的情况下进行重新组合). 对于Javascript来说,大部分 ...

  5. js之词法作用域与动态作用域

    事实上JavaScript并不具有动态作用域,它只有词法作用域,简单明了,但是this机制某种程度上很像动态作用域 词法作用域:是一套引擎如何寻找变量以及会在何处找到变量的规则,它是定义在词法阶段的作 ...

  6. 深入学习js之——词法作用域和动态作用域

    开篇 当我们在开始学习任何一门语言的时候,都会接触到变量的概念,变量的出现其实是为了解决一个问题,为的是存储某些值,进而,存储某些值的目的是为了在之后对这个值进行访问或者修改,正是这种存储和访问变量的 ...

  7. JS高级心法——作用域链

    首先我们来看两个js中的代码:    <script type="text/javascript"> var c=5; function t1(){ var d=6 f ...

  8. JS高级. 05 词法作用域、变量名提升、作用域链、闭包

    作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...

  9. js 中采用词法作用域

    所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行, 作用范围就已经确定好了. 这个就是所谓词法作用域. 在 js 中词法作用域规则: 1.函数允许访 ...

随机推荐

  1. Maven使用GitHub项目目录搭建远程仓库

    使用GtiHub的项目目录搭建第三方远程仓库,能免除使用服务器搭建Nexus私服,而且空间也是免费的.但是这种方式只适合小规模发布,毕竟搜索和版本控制是一个问题,如果需要更复杂的功能就只能转向Nexu ...

  2. canvas裁剪之后的base64转换为上传文件blob对象

    function convertBase64UrlToBlob(urlData){ var bytes=window.atob(urlData.split(',')[1]); //去掉url的头,并转 ...

  3. pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等

    pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表 ...

  4. Android: MediaRecorder start failed

    在某些机型上,MediaRecorder在调用start方法时,会出现start failed的错误,有一种可能是setVideoFrameRate导致的.要解决这个问题,只需要注释掉这条语句就可以了 ...

  5. Setting .xap MIME Type for Silverlight

    http://www.adefwebserver.com/dotnetnukehelp/misc/Silverlight/SettingMimeType.html Windows 2003: In I ...

  6. 迭代器概念与traits编程技法

    //迭代器是一种smart pointer template<typename T> class ListItem { public: T value() const { return _ ...

  7. TreeView获取目录下的所有文件

    /// <summary> /// TreeView获取目录下的所有文件 /// </summary> /// <param name="tree"& ...

  8. Leet Code OJ 26. Remove Duplicates from Sorted Array [Difficulty: Easy]

    题目: Given a sorted array, remove the duplicates in place such that each element appear only once and ...

  9. web的自己主动化公布

    </pre>基于眼下业务的版本号.使用的maven 及tomcat <p></p><p>假设我们使用 Jenkins 公布是比較好的,可是存在一定的问题 ...

  10. express的路由

    就是 app.get().app.post().app.all()啦,啦啦啦 (其中,var express = require("express"); var app = exp ...