通俗易懂详解Scope

原创 2016年09月09日 15:31:45
简单认识js作用域
var a = 1;

if(true){
    var b = 1;
}

console.log(b) //1

在面向对象的强语言中(Java,C……),其作用域都是基于块的(即:{}),块内可以对块外的变量进行操作,但是块外却对块内的变量是无法操作的。但是JS呢?一门弱语言,其并没有实现基于块的作用域,而是基于function的,因此上面的代码运行出来的结果b并不是undefined,说明最终a和b是定义在一个Scope内的。

预编译(变量提升)
var a = 1;
var b = 2;

function doit(){
    console.log(b);
    var b = 3;
    console.log(b);
}

doit();

console.log(b);

//undefined
//3
//2

相当于下面

var a = 1;
var b = 2;

function doit(){
    var b;
    console.log(b);
    b = 3;
    console.log(b);
}

doit();

console.log(b);

//undefined
//3
//2

讲到了Scope,不得不讲一讲js的预编译,为什么我们得到的第一个log的结果为undefined呢?按照强语言的思路来说这里应该是2才对呀,这就是js的预编译。js的代码在首次被加载完成后进行编译时,会将所有的function和var提前进行声明,但是并不会对其进行赋值,赋值则都是在该代码块进行执行时才会对其进行赋值,那么第一个log则是在预编译为b进行了声明后,这时b是没有时行赋值的,所以会log出undefined。

由于js是基于function来创建Scope的,所以只有doit执行时才会创建新的Scope

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据库三大范式详解(通俗易懂)

数据库三大范式详解(通俗易懂)

通俗易懂的USB协议详解(转载)

转自东海的博客http://6xudonghai.blog.163.com/blog/static/3364062920086253155137/ USB作为一种串行接口,应用日益广泛。如同每个...

通俗易懂的USB协议详解(转…

原文地址:通俗易懂的USB协议详解(转载)作者: Branchesss 转自东海的博客http://6xudonghai.blog.163.com/blog/static/33640629200...

Android异步任务详解 AsyncTask(通俗易懂,非常适合初学者)

android提供了一套专门用于异步处理的类。即:AynscTask类。使用这个类可以为耗时程序开辟一个新线程进行处理,处理完时返回。 其实,AsynTask类就是对Thread类的一个封装,并且加入...

联想Y470 非虚拟机安装苹果Mac OS X Mavericks 10.9.1教程详解(文字+图片),通俗易懂亲自动手——序列二之镜像写入,引导建立

下载安装HFS+ for Windows

CCF炉石传说题目代码详解C++版(类封装通俗易懂)

试题编号: 201612-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB 问题描述   《炉石传说:魔兽英雄传》(...

详解AJAX工作原理以及实例讲解(通俗易懂)

什么是 AJAX ? AJAX = 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实...

SVM 原理详解,通俗易懂

看了该作者的文章,瞬间膜拜了!讲得太好了! 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支...
  • abcd_d_
  • abcd_d_
  • 2015年04月17日 11:14
  • 13422

A星算法详解(个人认为最详细,最通俗易懂的一个版本)

A* 寻路算法 原文地址: http://www.gamedev.net/reference/articles/article2003.asp 概述 虽然掌握了 A* 算法的人认为它容易,但...
  • hitwhylz
  • hitwhylz
  • 2014年04月07日 10:29
  • 15116

最通俗易懂的网络应用层协议详解

前言其实本文只是讲解从传输层到应用层实现网络消息传递的一个详细流程,至于更底层的网络层和网络接口层,那就不在我的考虑范围内了,事实上那部分机制是不需要你去操心的,除非你想开发操作系统!然后本文打着通俗...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通俗易懂详解Scope
举报原因:
原因补充:

(最多只允许输入30个字)