Javascript模式——函数提升 (笔记)

函数提升:

对于所有的变量,无论函数体的何处进行声明,都会在后台被后台被提升到函数顶部。而对于函数同样适用,其原因在于函数只是分配给变量的对象。当使用函数声明时,函数定义也被提升,而不仅仅只是函数声明。

function foo(){

   alert(‘global foo‘);

}

function bar (){

   alert(‘global bar‘);

}

function hoistMe(){

   console.log(typeof foo); //function 变量foo以及实现都被提升

   console.log(typeof bar); //undefined  bar变量被提升 函数实现没有被提升

   foo();                  //global foo

   bar();                 //Uncaught TypeError: bar is not a function

   function foo(){

      console.log(‘global foo‘);

       }

   var bar =function(){

      console.log(‘local foo‘);

       };

}

hoistMe();

//hoistMe()函数中的foo()和bar移动到了顶部,从而覆盖了foo和bar函数

作用域:

javascript中仅存在函数作用域。在函数内部以var 关键字定义的任何变量都是局部变量,对于函数外部是不可见的。如果if条件语句或在for、while循环中,使用var关键字定义一个变量,这并不意味着该变量对于if或for来说是局部变量。它仅对包装函数来说是局部变量,并且如果没有包装函数,它将成为一个全局函数。

//这里for中定义的i是局部变量。作用域仅在part中

function part(){
    for(var i=0;i<10;i++){
       //..........
   }
}

//这里这里for中定义的i是全部变量。

for(var i=0;i<10;i++){
       //..........
   } 

函数命名属性:

function fn(){} //函数声明

var fn=function(){};//函数表达式

var fn=function fn(){};//函数命名表达式

在调试器中调试时,name属性是非常有用的,当调试器需要展示函数中的错误时,它可以检测name属性是否存在,并将其作为一个指示符。

name属性也可用于在自身内部递归调用同一个函数。

 

时间: 2024-08-01 10:45:20

Javascript模式——函数提升 (笔记)的相关文章

javascript 变量/函数 提升

1.JavaScript hoisting(变量/函数 提升) 以下实验都是通过firefox的Console做的实验. console.log(a); ReferenceError: a is not defined console.log(a); 但是,如果在后面加上变量的定义的话,结果将会变得不同. console.log(a); var a = 10; undefined 之前变量没有定义的错误没了,取而代之的是告诉我们a的值是 'undefined'. 先不管a的值缘何为 'undef

Javascript中函数提升和变量提升

词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Object),简称AO 分析参数 函数接收形式参数,添加到AO的属性,并且这个时候值为undefine,例如AO.age=undefine 接收实参,添加到AO的属性,覆盖之前的undefine 分析变量声明,如var age;或var age=23; 如果上一步分析参数中AO还没有age属性,

《JavaScript模式》读书笔记

前言: 模式是针对普遍问题的解决方案.更进一步地说,模式是解决一类特定问题的模版. 第一章:简介 在软件开发过程中,模式是指一个通用问题的解决方案. 一个模式不仅仅是一个可以用来复制粘贴的代码解决方案,更多地是提供一个更好的实践经验.有用的抽象化表示和解决一类问题的模版.关键词: 表示.解决 学习模式的好处: 学习模式,我们可以使用经过实践证明有效的经验来编写代码,而无需做很多无用的工作. 模式提供了某种程度上的抽象. 这样,在解决复杂问题时,想到这个模式即可,无需考虑太多细节. 模式可以改进开

Javascript中函数及变量定义的提升

<html> <head> <title>函数提升</title> <script language="javascript" type="text/javascript"> //在全局对象中声明两个全局函数,反模式 function foo() { alert("global foo"); } function bar() { alert("global bar")

javascript中函数作用域之”提升“

javascript中函数作用域之变量提升 当我们在函数内部用关键字var声明一个变量的时候,此变量的作用域限制在当前函数. 提升:在一个作用域内部,不管一个变量用var声明的位置在哪里,这个变量属于当前整个作用域,并且在当前作用域的任何位置都可以访问它.在javascript中,这种行为/现象称之为"提升",即一个变量在一个作用域的任何位置用var声明,javascript引擎都会把这些用var声明的变量"移动"到当前作用域的开始处. 谈到javascript这种

《javascript设计模式》读书笔记四(单利模式)

1.单利模式简介 在<设计模式>中单利模式是一种比较简单的模式,定义如下: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 在javascript中则将代码组织为一个单元,这个逻辑单元可以通过一个单一的变量访问,确保这个对象只存在一份实例. 单体类在javascript中可以用来划分命名空间.减少网页中全局变量的数目. 小结:其实就是把所有的代码封装到一个类中,访问时就通过这个类访问.好比生活中常见的电视遥控.把所需要的操作都封装到遥控上,访问电视时,直接通过遥控操作即可.

JavaScript中函数的四种调用模式

理解函数的四种调用方法,可以有效的帮助我们分析和理解JavaScript代码.但是经常有人分不清楚或者不理解这四种调用模式,在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:1.函数调用形式 2.方法调用形式 3.构造器调用形式 4.上下文调用形式(apply,call)这里所有的调用模式中,最主要的区别在于关键字 this 的意义.下面分别介绍这几种调用形式. 一.函数调用形式

JavaScript系列文章:变量提升和函数提升

第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函数提升 3. 为什么要进行提升 4. 最佳实践 那么,我们就开始进入主题吧. 1. 变量提升 通常JS引擎会在正式执行之前先进行一次预编译,在这个过程中,首先将变量声明及函数声明提升至当前作用域的顶端,然后进行接下来的处理.(注:当前流行的JS引擎大都对源码进行了编译,由于引擎的不同,编译形式也会有

对javascript变量提升跟函数提升的理解

在写javascript代码的时候,经常会碰到一些奇怪的问题,例如: console.log(typeof hello); var hello = 123;//变量 function hello(){//函数声明 } console.log(typeof hello); var hello = function(){//函数表达式 } console.log(typeof hello);//function number function 对于为什么会是这样的一个结果:function numb