`
lwp11411
  • 浏览: 21456 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JavaScript的一些困惑

阅读更多

定义一个全局变量,一个函数调用此变量,如下:

var s = 123;
function tst(){
alert(s);
 s = 456;
alert(s);
}
alert(s);

执行后为:

123

123

456

如果写成如下格式:

var s = 123;
function tst1(){
alert(s);
var s = 456;
alert(s);
}
alert(s);

执行后为:

123

undefined

456

     为什么下面这个会是这样的结果呢?

     按照abruzzi的《Javascript Core v0》上所说为:

     Javascript的函数是在局部作用域内运行的函数体可以访问其外层的(可能是全局作用域)变量和函数。javascript的作用域为词法作用域所谓词法作用域,其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定。

     具体到这个例子,那就是:因为在函数tst1的定义中,预先访问了未声明的变量s,然后才对s变量进行初始化,所以第一个alert(s)会返回undefined,那为什么函数这个时候不访问外部的s变量呢?这是因为,在词法分析结束后,构造作用域链的时候,会将函数内定义的var变量放入该链,因此s在整个tst1内都是可见的(从函数体的第一行到最后一行),由于s变量本身是未定义的,程序顺序执行,到第一行就返回undefined,第二行为s赋值,所以第三行返回456。

 

分享到:
评论

相关推荐

    悟透JavaScript

    也许是80后,90后的程序员或者前端架构师,正被Javascript魔幻般的魅力所吸引,所困惑,已经徘徊许久……那么本书正是你所需要的!通过本书,您可以独辟蹊径学习、理解和运用Javascript;通过本书,您...

    悟透JAVASCRIPT PDF

    翻开此书的你,也许是JavaScript的崇拜者,正想摩拳擦掌地想尝试下学一学这一精巧的...也许是80后,90后的程序员或者前端架构师,正被JavaScript魔幻般的魅力所吸引,所困惑,已经徘徊许久……那么本书正是你所需要的

    【JavaScript源代码】Javascript生成器(Generator)的介绍与使用.docx

    Javascript 的生成器语法类似于 PHP,但是区别也很大,如果你希望它们的作用相同,那么最终你会感到非常困惑。 在 javascript 中,如果想要使用生成器,则需要:  定义特殊的生成器函数 调用该函数创建一个生成...

    JavaScript王者归来part.1 总数2

     1.4 一些值得留意的特性 禁忌及如何突破这些禁忌   1.5 安全性和执行效率   1.6 一个例子--JavaScript编写的计算器   1.7 学习和使用JavaScript的几点建议   1.8 关于本书的其余部分   第2章 浏览器中...

    分析 JavaScript 中令人困惑的变量赋值

    分析 JavaScript 中令人困惑的变量赋值

    基于JavaScript实现的关于旅游行业数据的可视化分析系统源码.zip

    基于JavaScript实现的关于旅游行业数据的可视化分析系统源码.zip基于JavaScript实现的关于旅游行业数据的可视化分析系统源码.zip基于JavaScript实现的关于旅游行业数据的可视化分析系统源码.zip基于JavaScript实现的...

    JavaScript内核系列

    1996年后期,网景向欧洲电脑厂商协会(ECMA)提交了 Javascript的设计,以申请标准化,ECMA去掉了其中的一些实现,并提出了ECMAScript-262标准,并确定Javascript的正 式名字为ECMAScript,但是JavaScript的名字已经...

    深入浅析JavaScript中的作用域和上下文

    这些概念是javascript中一些强大的设计模式的后盾。然而这也给开发人员带来很大困惑。下面全面揭示了javascript中的上下文和作用域的不同,以及各种设计模式如何使用他们。 上下文(Context)和作用域(Scope) 首先...

    浅谈JavaScript的函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容。 (一)JavaScript函数 JavaScript函数是...

    rusty-jsyc:用Rust编写JavaScript到字节码编译器

    也有一篇解释了这个项目和虚拟化的困惑。如何使用您必须首先编译给定JavaScript代码。 之后,您可以使用提供的虚拟机执行它。编译您JavaScript代码您可以使用提供的命令行工具: cargo run < /path/to/...

    javascript 内存模型实例详解

    如果你和我有同样的困惑,希望这篇文章能给你一些启发。 译文,喜欢原文的可以直接拉到底部 当我们声明变量、初始化变量、更改变量值的时候,到底会发生什么?JavaScript 是如何实现这些基本的功能?最重要的是,...

    Front-End-JavaScript-Frameworks-Angular

    困惑该项目是在学习前端javascript框架时创建的:香港科技大学的Coursera中的Angular课程。 本课程由Joesh K Muppala 。 该项目是使用版本6.2.1生成的。开发服务器为开发服务器运行ng serve 。 导航到...

    7种皮肤,精心设计JAVASCRIPT日历控件

    7种皮肤,精心设计JAVASCRIPT日历控件.我的资源都是多年经验精品收集,敬请大家关注.在使用中有困惑请加QQ158550886.

    Logit:再次尝试 javascript,试图让 IIFE 工作

    登录 再次尝试 javascript,试图让 IIFE 工作。 它仍然让我感到困惑。

    JavaScript对数字的判断与处理实例分析

    Javascript多态的属性是非常爽的,一个var就不用记这么多奇怪的变量,然而,有时候你会困惑,为何,我明明是对两个数进行相加处理,可是结果却被当作字符串加起来呢?这就是Javascript的var不好的地方,它不像php,...

Global site tag (gtag.js) - Google Analytics