`
MirrorAvatar
  • 浏览: 47967 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ECMAScript声明提升需要注意的几点

阅读更多

博客地址:http://mirroravatar.iteye.com/blog/2182793

 

出场白:

JavaScript Hoisting,即JavaScript声明提升,包括函数声明提升和变量声明提升。

 

正文部分:

 

  1. 声明的提升,是按作用域来提升的。比如说,函数中的一个变量声明是这样的:
    function foo() {
        console.log(a);//undefined
        var a = 2;
    }
     这里面的变量a只能提升到函数foo内部的最上方,提升不到foo函数外面的作用域当中,只能是这样的:
    function foo() {
        var a;
        console.log(a);
        a = 2;
    }
     
  2. 函数声明(Function delaration)能提升,但是函数表达式(Function expression)不能提升,例:
    foo(); // not ReferenceError, but TypeError!  
      
    var foo = function bar() {  
        // ...  
    }; 
     
  3. 遵循函数是“第一公民”(first class)的准则,函数声明提升优先于变量声明提升。直接上例子吧:
    foo(); // 1
    
    var foo;
    
    function foo() {
        console.log( 1 );
    }
    
    foo = function() {
        console.log( 2 );
    };
     此例子中,控制台输出的是1,原因是,函数声明提升优先,可以将代码做如下的转换:
    function foo() {
        console.log( 1 );
    }
    
    foo(); // 1
    
    foo = function() {
        console.log( 2 );
    };
     值得注意的是var foo不见了,原因也是函数声明提升优先,导致var foo无效,所以var foo  此代码是不编译的。

 

分享到:
评论

相关推荐

    ECMAScript+6入门

    ### ECMAScript 6 入门知识点概览 #### 1. ECMAScript 6 (ES6) 的定义与发展背景 - **ECMAScript 6**:亦称ES6,是JavaScript语言的一项重要更新,旨在增强语言的功能性,使之能够支持更加复杂的企业级应用开发。...

    ECMAScript规范-第三版_中文版.

    在ES3中,以下几个核心知识点值得深入理解: 1. **语法**:包括词法结构、表达式、语句、函数等。词法结构中,注释、字符串、正则表达式都是基本元素。表达式如算术、比较、逻辑、条件等,语句如赋值、控制流程(if...

    javascript变量声明实例分析

    在使用var声明变量时,有如下几个要点需要注意: 1. 在函数体内部使用var关键字声明变量是必须的,如果在函数体内部不使用var声明变量,该变量会被隐式地声明为全局变量。但在全局作用域中,即使不使用var,变量也...

    js笔记

    - **变量声明提升**: 变量声明会被提升到当前作用域的顶部,但是初始化赋值部分不会被提升。因此,如果尝试在声明之前访问变量,其值将是 `undefined`。 ### 3. 预编译过程 在函数执行之前,JavaScript 引擎会先...

    JavaScript Flash五屏焦点图

    在JavaScript中实现Flash五屏焦点图,我们需要掌握以下几个核心知识点: 1. **DOM操作**:JavaScript提供了访问和操作HTML文档对象模型(DOM)的能力。在焦点图中,我们需要通过DOM来获取和修改元素(如图片、箭头...

    JavaScript写的四屏Flash焦点图广告代码,横向滚动

    在实际开发中,为了优化性能和用户体验,开发者还需要考虑以下几点: - 使用异步加载:避免阻塞页面的其他内容,可以使用异步加载方式来加载广告代码。 - SEO友好:如果Flash曾被使用,应考虑将其替换为HTML和...

    Javascript基础

    需要注意的是,如果在声明变量时不使用`var`,该变量将成为全局变量,这通常不是推荐的做法。 JavaScript具有多种数据类型,包括原始类型和引用类型。其中,基本数据类型包括Undefined、Null、Boolean、Number和...

    ECMAScript-Gulp:在gulpfile中测试ES6语法并进行转译

    这涉及到以下几个关键知识点: 1. **ES6新特性**:ES6引入了箭头函数、模板字符串、let和const变量声明、解构赋值、类和模块等新特性。这些特性让代码更加简洁、易读,同时提高了开发效率。 2. **Babel**:由于...

    c语言奔跑的火柴人游戏源码.zip

    通过这个项目,学习者可以了解到以下几个关键知识点: 1. **C语言编程基础**:包括变量、数据类型、流程控制语句、函数等。 2. **图形绘制**:C语言可能使用库如SDL或OpenGL进行图形绘制,学习者可以了解图形上下文...

    好看的流光风格个人主页HTML源码好看的流光风格个人主页HTML源码

    接下来,我们将深入探讨与这个主题相关的几个关键知识点。 1. HTML基础结构:HTML(HyperText Markup Language)是网页设计的基础,用于定义页面的结构。一个标准的HTML文件通常包括`<!DOCTYPE html>`声明、`<html>...

    前端开源库-use-strict

    严格模式主要有以下几个关键知识点: 1. **启用方式**: 在脚本或函数的开头添加 'use strict'; 语句即可启用严格模式。这会使得整个脚本或函数在严格模式下运行。 2. **限制与改进**: - 变量声明:在非严格...

    JavaScript新浪网五屏Flash翻牌广告demo

    在这个“JavaScript新浪网五屏Flash翻牌广告demo”中,我们主要会探讨以下几个核心知识点: 1. **JavaScript基础**:JavaScript的基础包括变量、数据类型、控制结构(如if语句、for循环、while循环)、函数以及对象...

    javascript ES5文档

    ### JavaScript ES5 文档知识点详解 #### 一、基本语法 JavaScript 是一种广泛使用的脚本语言,用于网页交互。ES5 是 ECMAScript 的第五版标准,发布于 2009 年,并且被大多数现代浏览器所支持。 **1.1 赋值** ...

    Simple Color Game using JavaScript with Source Code.zip

    在JavaScript中,游戏的核心逻辑可能包含以下几个关键知识点: 1. **颜色表示**:在JavaScript中,颜色可以使用RGB(红绿蓝)值、HEX(十六进制)编码或者CSS颜色名来表示。例如,`rgb(255, 0, 0)`代表红色,`#FF...

    浅谈js的解析顺序 作用域 严格模式

    // 输出函数体,因为函数声明提升了 function a() { alert("函数"); } var a = 1; ``` **严格模式** 严格模式(strict mode)是es5引入的一个可选的限制性js变体,它通过提供更加严格的错误检查和额外的警告来...

    day05-es6-课件.rar

    **ES6,全称ECMAScript 2015,是JavaScript语言的一个重大更新版本,引入了许多新的特性和语法糖,极大地提升了开发效率和代码质量。Node.js是基于Chrome V8引擎的JavaScript运行环境,它使得JavaScript可以在服务器...

    几种焰火f的lash源码,很好的

    7. **优化性能**:由于焰火特效可能涉及大量粒子,开发者需要注意优化代码以防止性能下降。例如,使用位图缓存(BitmapData)可以提高大量图形渲染的效率。 通过学习和理解这些Flash编程和动画制作技术,开发者能够...

    JavaScript 5

    在JavaScript 5中,我们主要关注以下几个核心知识点: 1. **变量声明的提升(Hoisting)**:在JavaScript 5中,无论var关键字在哪里声明变量,它们都会被提升到当前作用域的顶部。这可能导致一些初学者遇到预期外的...

    jquery一屏4张图一齐滚动的焦点图Demo

    对于这个Demo来说,主要涉及以下几个关键知识点: 1. **jQuery选择器**:jQuery提供了丰富的选择器,如`$("#id")`用于选取ID为特定值的元素,`$(".class")`用于选取具有特定类名的元素,以及`$("tagname")`用于选取...

    Javascript基础教程之变量

    在JavaScript中,声明变量的方式有几种,最常用的是使用var关键字。使用var声明变量是一种推荐的做法,因为它可以明确变量的作用域,并避免JavaScript自动将变量提升到全局作用域。如果不使用var声明变量,...

Global site tag (gtag.js) - Google Analytics