《JavaScript应用程序设计》一一2.6 函数作用域

2.6 函数作用域

变量作用域是指变量能够被使用的代码区间。超出作用域的变量值一般为undefined,或者被其他同名变量值所覆盖。大部分类C语言都有块级作用域的概念,这意味着任意代码块都可以成为变量作用域。JavaScript中没有这个块级作用域的概念,拥有其他语言编程经验的JavaScript新手往往会为此而感到困惑。
通过var关键字声明的变量具有函数作用域,不过ES6规范中新增了let关键字,使用其声明的变量具有块级作用域。已经有一部分浏览器率先对ES6规范进行了实现,不过你还是最好等到这一规范真正成熟落地之后再做使用。
注意: 使用块级作用域来组织代码是一个值得提倡的编码习惯,这样,函数也能够被拆分为更小的单元,无论对代码的易读性、复用性,还是组织性来说都有帮助。

时间: 2024-10-03 23:20:40

《JavaScript应用程序设计》一一2.6 函数作用域的相关文章

《JavaScript应用程序设计》一一2.4 立即执行函数表达式

2.4 立即执行函数表达式 在JavaScript中,我们可以在函数声明后立即将其执行,这个技术曾在社区中被称为"自执行匿名函数",不过冠以这个名称让人们觉得函数能够被递归调用,显然有点不太妥.Ben Alman曾发表了一篇名为"自执行函数表达式"(IIFE)的博文(http://bit.ly/i-ife/),相比之下,人们觉得缩写IIFE显得更为有趣且清晰易懂,现在IEIF一词已经在JavaScript社区中广为使用.IIFE所创建出的临时作用域常常用来作模块封装

《JavaScript应用程序设计》一一3.8 工厂函数

3.8 工厂函数 使用对象字面量带来的便捷是显而易见的,不过它们无法封装私有数据.封装的概念之所以在编程中具有价值,是因为它将程序内部的实现细节对使用者做了隐藏.回忆一下"四人帮"在面向对象设计模式一书中首章的描述,"面向接口编程,而不是面向实现编程",封装将这一编码原则在代码中贯彻,即对使用者隐藏实现细节.不过,经过前面几节的介绍,你已经对构造函数的弊病有所了解,并知晓如何去规避.下面介绍一种构造函数的替代方案:工厂函数.工厂函数被用来构建并实例化对象,使用它的目

JavaScript高级程序设计(第3版)学习笔记9 js函数(下)_基础知识

再接着看函数--具有魔幻色彩的对象. 9.作为值的函数 在一般的编程语言中,如果要将函数作为值来使用,需要使用类似函数指针或者代理的方式来实现,但是在ECMAScript中,函数是一种对象,拥有一般对象具有的所有特征,除了函数可以有自己的属性和方法外,还可以做为一个引用类型的值去使用,实际上我们前面的例子中已经有过将函数作为一个对象属性的值,又比如函数也可以作为另一个函数的参数或者返回值,异步处理中的回调函数就是一个典型的用法. 复制代码 代码如下: var name = 'linjisong'

JavaScript高级程序设计(第3版)学习笔记8 js函数(中)_基础知识

6.执行环境和作用域 (1)执行环境(execution context):所有的JavaScript代码都运行在一个执行环境中,当控制权转移至JavaScript的可执行代码时,就进入了一个执行环境.活动的执行环境从逻辑上形成了一个栈,全局执行环境永远是这个栈的栈底元素,栈顶元素就是当前正在运行的执行环境.每一个函数都有自己的执行环境,当执行流进入一个函数时,会将这个函数的执行环境压入栈顶,函数执行完之后再将这个执行环境弹出,控制权返回给之前的执行环境. (2)变量对象(variable ob

JavaScript高级程序设计(第3版)学习笔记7 js函数(上)_基础知识

变量类型 在说函数之前,先来说说变量类型. 1.变量:变量在本质上就是命名的内存空间. 2.变量的数据类型:就是指变量可以存储的值的数据类型,比如Number类型.Boolean类型.Object类型等,在ECMAScript中,变量的数据类型是动态的,可以在运行时改变变量的数据类型. 3.变量类型:是指变量本身的类型,在ECMAScript中,变量类型就只有两种:值类型和引用类型.当变量的数据类型是简单数据类型时,变量类型就是值类型,当变量的数据类型是对象类型时,变量类型就是引用类型.在不引起

JavaScript函数作用域链分析_javascript技巧

本文实例分析了JavaScript函数作用域链.分享给大家供大家参考.具体分析如下: 作用域链: JavaScript的每个函数function都有自己的作用域,使用Active Object(简称AO)活动对象来保存,在相互嵌套的函数中形成了作用域链,如下图所示: 作用域链就是从里到外的AO链 变量的寻找: 函数fn3中使用的变量,如在fn3作用域内寻找不到,则往外层fn2作用域寻找,以此类推,直到全局对象window 代码演示如下: var c = 5; function t1(){ var

javascript函数作用域学习示例

 javascript中没有块级作用域,取而代之的javascript使用的是函数作用域,下面使用示例学习一下js作用域的使用方法 在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取而代之的javascript使用的是函数作用域(function scope):变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 在如下代码中,在不同

《JavaScript应用程序设计》一一2.7 变量提升

2.7 变量提升 变量提升是指函数中的所有变量声明会在函数执行时被"提升"至函数体顶端,这仅仅是从非技术角度来阐述的,至少从开发者看来实际效果如此. JavaScript的执行环境构建分为声明阶段和执行阶段.在声明阶段JavaScript引擎为所有变量与函数声明创建标识符,可以将此阶段看作是对运行环境的前期配置.到了执行阶段,函数均已被定义,但所有变量的值均未定义,例如: var x = 1; (function () { console.log(x); var x = 2; }())

《JavaScript应用程序设计》一一2.3 lambdas

2.3 lambdas lambdas是指那些作为数据使用的函数,它可以是函数的传入参数,也可以是函数的返回值,更可以是一个字面量,总之它的用法与普通的表达式十分类似.举例来说: var sum = function sum() { var result = 0; [5, 5, 5].forEach(function addTo(number) { result += number; }); return result; }; test('Lambdas.', function () { equ