js词法作用域规则
function foo() {
console.log( a ); // 2不是3
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();
js中的作用域就是词法作用域
词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规
则。 词法作用域最重要的特征是它的定义过程发生在代码的书写阶段( 假设你没有使用
eval() 或 with)
而动态作用域并不关心函数和作用域是如何声明以及在何处声明的, 只关心它们从何处调
用。 换句话说, 作用域链是基于调用栈的, 而不是代码中的作用域嵌套.
所以js的作用域是词法作用域即从函数书写时的位置寻找.
=====================================================================
主要区别: 词法作用域是在写代码或者说定义时确定的, 而动态作用域是在运行时确定
的。( this 也是! ) 词法作用域关注函数在何处声明, 而动态作用域关注函数从何处调用
js词法作用域规则的更多相关文章
- js词法作用域
作用域链和原型链是JS中比较重要的2个概念, JS的是函数作用域,与C之类语言的块级作用域不同 JS的作用域还是词法作用域,或者叫静态作用域,作用域链是在语法解析时就完成的,而不是在执行时创建. 例子 ...
- JS 词法作用域 p2
关于js 还是写的简短些,利于个人理解: 先看一个例子: var a = 2; function fn(){ var a = 3; console.log(a); } fn(a); 说明:作用域查找会 ...
- [label][JavaScript]读nowmagic - js词法作用域、调用对象与闭包
原文链接: http://www.nowamagic.net/librarys/veda/detail/1305 作用域(scope) JavaScript 中的函数 ...
- js 中采用词法作用域
所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行, 作用范围就已经确定好了. 这个就是所谓词法作用域. 在 js 中词法作用域规则: 1.函数允许访 ...
- JS高级. 05 词法作用域、变量名提升、作用域链、闭包
作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...
- js中采用词法作用域
所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行, 作用范围就已经确定好了. 这个就是所谓词法作用域. 在 js 中词法作用域规则: 1.函数允许访 ...
- JS高级——词法作用域
作用域 1.js中没有块级作用域 2.如果有块级作用域,那么下面代码将会是undefined undefined <script> for (var i = 0; i < 10; i ...
- 区分词法作用域(js)与动态作用域(精!)
在js学习中,词法作用域是必须要掌握的! 在这里,我将总结一下<你不知道的JS>一书中词法作用域的重点并分享给大家! 首先带来一段代码示例: function foo(){ console ...
- 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
原文:你不知道的js系列 在第(二)节中提到的,标识符在作用域中声明,这些作用域就像是一个容器,一个嵌套一个,这个嵌套关系是在代码编写时定义的. 那么到底是什么产生了一个新的作用域,只有函数能做到 ...
随机推荐
- ADB 在 Android SDK 的中的路径
以前 adb.exe 是在 sdk/tools 目录下 现在 安装 sdk 之后, 需要打开 SDK Manager 下载 `Android SDK Platform-tools` 然后, 在 sdk ...
- iOS - (懒加载)
今天很坑爹,做界面的时候,tableview 明显做了复用了,数组也做了懒加载了,获取数据前也把数组给清空了,但是每次获取数据刷新表格的时候,数据确重复覆盖了(重复创建),后来给 cell 加了个白色 ...
- LUA 模块化编程例子
LUA module lua语言中module接口用于定义一个模块, 将模块的实现封装到一个文件中, 开放的 函数 和 数据, 不以local标识,然后在其他文件中, 引用此模块, 使用模块名(一个命 ...
- 通常Struts框架会自动地从action mapping中创建action对象
开发者不必在Spring中去注册action,尽管可以这么去做,通常Struts框架会自动地从action mapping中创建action对象 struts2-spring-plugin-x-x-x ...
- linux:ACL权限
ACL权限是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限: 比如:一个网络老师,给一个班的学员上课,他在linux的根目录下 ...
- 来自“Java中国”优秀的程序员不会觉得累成狗是一种荣耀
分享下“https://java-china.org/topic/28“,也算是对自己的一种告诫吧. 原文:Sleep deprivation is not a badge of honor 先介绍一 ...
- MVC3 FAQ
1. html helper 可以缩写代码的,下面2段代码是相同效果 @Html.DropDownList("TourList") <select name="aa ...
- devexpress13学习系列(四)PDFViewer(4)
PdfViewer的属性: CurrentPageNumber:显示当前页的页码. DocumentFilePath:当前文件. DocumentProperties:文件属性. PageCount: ...
- 显示和隐藏Mac下的 隐藏文件
显示:defaults write com.apple.finder AppleShowAllFiles -bool true隐藏:defaults write com.apple.finder Ap ...
- 最新RubyMine2016.2开发Ruby ON Rails(ROR)程序的流程
1.RubyMine新建ROR工程 File->New Project 选择Rails下的"New Application" 点击OK 后生成ROR项目 ...