`
lwp11411
  • 浏览: 22028 次
  • 性别: 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。

 

分享到:
评论

相关推荐

    Apress.Expert.JavaScript

    其次,深入剖析JavaScript的对象和原型机制,这是JavaScript独特的地方,也是许多初学者困惑的点。书中会解释如何创建对象,原型链的工作原理,以及如何利用闭包和作用域实现模块化编程。 此外,书中还将涵盖...

    JavaScript 语言精粹

    闭包是JavaScript中一个强大且有时也易引起困惑的概念,它允许函数访问并操作其外部作用域的变量,即使在其外部函数已经执行完毕后。 此外,《JavaScript语言精粹》还会深入讨论作用域、变量提升、this关键字、事件...

    JavaScript忍者秘籍

    在学习路线和方法上,初学者往往会困惑于不知如何有效地学习JavaScript,并将学到的知识转化为能帮助找到工作的实际技能。通过加入专业的学习群组,如提供的QQ群(***),可以获取企业级框架如jQuery、Bootstrap、...

    Javascript忍者的秘密

    此外,JavaScript中的this关键字常常让初学者感到困惑。this的值取决于函数的调用方式,可以是全局对象、对象方法、构造函数或箭头函数。理解this的动态绑定规则对于编写面向对象的JavaScript至关重要。 再者,ES6...

    悟透JavaScript

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

    javascript课件

    这些是JavaScript独特之处,也是许多开发者容易困惑的地方。理解它们有助于编写更高效、更健壮的代码。 函数式编程是JavaScript中的重要思想,包括高阶函数、函数组合和柯里化等概念。学习者将学习如何利用这些技术...

    悟透JavaScript javascript 圣经

    同时,JavaScript的构造函数和prototype机制使得模拟类的继承成为可能,尽管这可能会导致一些初学者的困惑。 在“悟透JavaScript”的描述中,通过类比数据与代码的关系与物质能量之间的关系,强调了JavaScript中...

    JavaScript语言精粹 中文高清PDF

    接着,书中深入讲解了对象和原型,这是JavaScript的核心特性,也是许多初学者困惑的地方。通过学习,读者将了解如何创建和操作对象,以及如何利用原型实现继承。 此外,书中还会涉及函数式编程的概念,这是...

    Javascript中神奇的this

    JavaScript中的`this`关键字是一个非常重要的概念,它与许多其他编程语言中的行为不同,因此常常让开发者感到困惑。本文将详细解析`this`在JavaScript中的工作原理及其绑定规则。 1. `this`并不总是指向函数自身 ...

    Effective JavaScript

    特别是this的绑定规则,是许多开发者容易困惑的地方,书中对此进行了详尽的解释。箭头函数的引入简化了函数定义,但同时也改变了this的指向,作者对此做了清晰的对比分析。 类型系统是JavaScript的一大特色,因为它...

    javascript 权威指南第五版(含源码)

    其次,书中深入剖析了JavaScript的对象和原型机制,这是JavaScript的一大特色,也是许多初学者感到困惑的地方。书中详细介绍了如何创建对象,原型链的工作原理,以及如何使用构造函数和原型模式进行面向对象编程。...

    javaScript教学从入门到精通案例大集合(包含讲义文档,案例源码,内容共十二章)

    6. **闭包与作用域**:JavaScript的作用域规则和闭包是其独特之处,也是许多开发者困惑的地方。案例会详细解释这两者的原理,并提供实用的应用场景。 7. **ES6新特性**:ECMAScript 6(简称ES6)引入了许多新特性和...

    JavaScript权威指南_第6版 含源码

    作为第六版,本书在原有的基础上进行了更新,涵盖了最新的JavaScript特性和标准,包括ECMAScript 6(ES6)及后续版本的一些关键特性。 首先,书中详尽地介绍了JavaScript的基础知识,如变量、数据类型(包括基本...

    ArcGIS for JavaScript

    对于初学者,学习ArcGIS for JavaScript API可能会感到困惑,因为网上的资源分散且不统一。整理出一份详细教程至关重要,它可以帮助开发者系统地了解API的用法,逐步掌握地图的创建、图层管理、空间分析等核心功能。...

    clean-code-javascript

    好的命名能够帮助开发者快速理解变量的作用,减少阅读代码时的困惑。 ##### 1. 使用有意义且易于发音的名字 **错误示例**: ```javascript const yyyymmddStr = moment().format('YYYY/MM/DD'); ``` **正确示例**...

    JavaScript程序设计javascript中this

    在JavaScript中,`this`的值取决于函数调用的方式,而不是定义的方式,这为开发者提供了很大的灵活性,但也可能导致初学者困惑。 1. 全局作用域与函数作用域 在全局作用域中,`this`通常指向全局对象。在浏览器...

Global site tag (gtag.js) - Google Analytics