开发者社区> 木头先生> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

js中采用词法作用域

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


所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行,

作用范围就已经确定好了. 这个就是所谓词法作用域.

在 js 中词法作用域规则:

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

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

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

4.如果当前作用规则中有名字了, 就不考虑外面的名字.

 

在编译语言中,**通常** 代码在被引擎执行之前会经历三个步骤:

1. 词法分析(tokenzing/lexing)
2. 解析/语法分析(parsing)
3. 代码生成

而 Javascript 则是在运行时编译,边编译边执行,这个机制涉及到三样东西:

1. 引擎
2. 编译器
3. 作用域

编译器首先对代码进行编译,然后将生成的代码提供给引擎执行。引擎和编译器工作的时候,都会用到作用域。编译器编译时,会在作用域中查找标示符,如果没有找到的话则会在对应的作用域创建一个标示符。引擎在执行时不断的在作用域中查找标示符,如果一直到全局对象(Global object)都没有找到的话则抛出一个 `Reference Error` 并停止代码的执行。

主要来看一下作用域,作用域有两种主要的工作模式:词法作用域和动态作用域。大多数标准语言编译器的第一个工作阶段叫做词法化,词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是根据你写代码时变量和块作用域写在哪里来决定的,和你使用/调用的位置无关。

 

看几个例子:

A

var num = 123;
function f1() {
console.log( num );
}
function f2() {
var num = 456;
f1();
}
f2();
结果输出123


B

var num = 123;
function f1() {
console.log( num );
}
function f2() {
num = 456;
f1();
}
f2();

结果输出456

 

C

function b () {

var a = a || 2;
console.log(a);
}
var a = 1;
b() // 2

结果输出2

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
「注解」《你不知道的JavaScript(上卷)》第二章:词法作用域
「注解」《你不知道的JavaScript(上卷)》第二章:词法作用域
42 0
JS语法作用域与词法作用域
原文地址:http://blog.csdn.net/huli870715/article/details/6387243 var ClassA = function(){ this.
879 0
基于H5+css+JavaScript实现跳跳糖加载
基于H5+css+JavaScript实现跳跳糖加载
24 0
用纯JavaScript实现的微信二维码图片生成器
QRCode.js是javascript实现二维码(QRCode)制作生成库。 QRCode.js有着良好的跨浏览器兼容性(高版本使用HTML5的 Canvas,低版本IE使用table元素绘制),而且QRCode.js没有任何依赖。只需要引用一个JS。
1017 0
用原生javascript实现最简单的发布者-订阅者模式
http://www.cnblogs.com/surahe/p/6065778.html    发布—订阅模式可以广泛应用于异步编程中,这是一种替代传递回调函数的方案。比如,我们可以订阅 ajax 请求的 error 、 succ 等事件。
829 0
十大经典排序算法的 JavaScript 实现
  计算机领域的都多少掌握一点算法知识,其中排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
1135 0
JavaScript小效果的实现(笔记)
在学习一些JavaScript效果,做一些实现效果笔记,顺便整理一下思路。 LightBox效果实现: <!DOCTYPE html> <meta charset="utf-8"> <html> <head> <title>Lightbox效果</title> <style type="text/cs
1147 0
Javascript日期格式化指定格式的字符串实现
代码部分 TypeScript 1 /** 2 * format a Date object 3 * 将 Date 转化为指定格式的String 4 * @param {Date} date 源日期对象 5 * @param {string...
818 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JS 语言在引擎级别的执行过程
立即下载
编程语言如何演化—— 以 JS 的 private 为例
立即下载
Python第五讲——关于爬虫如何做js逆向的思路
立即下载