javascript变量声明与函数声明提升

在JavaScript中,在声明变量或者函数前就使用变量或者函数,会产生以外的错误。这些在很多JS的笔试题中都会出现。

先看下面这道题:

1 (function( ) {
2      var x = foo( );
3      var foo = function foo( ){
4            return "foobar" ;
5      }
6      return x;
7 })( );问:上面函数的返回值是()

A、类型错误B、foobarC、undefinedD、foo( )答案应该选A,而不是D。说到这原因大家应该都清楚了。问题就处在这一句代码处:var foo = function foo(){  return "foobar";}使用var声明变量foo,会将其提升至函数体的最前面,但后面函数表达式不会提升相当于下面这样:var foo;var x = foo();foo = function foo(){....};因此当函数执行到var x = foo();时,函数foo()还没有声明,因此会出现类型错误:TypeError: foo is not a function.

要想解决上面的代码问题有两重=种方式:1、
(function( ) {     var foo = function foo( ){            return "foobar"        }       var x = foo( );
     return x; 
 })( );

2、去掉var foo,直接利用function()声明foo(),这样foo()也会被提升到最前面

1 (function( ) {
2      var x = foo( );
3      function foo( ){
4            return "foobar" ;
5      }
6      return x;
7 })( );
时间: 2024-10-29 19:08:06

javascript变量声明与函数声明提升的相关文章

javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)

平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种函数的创建,究竟他们用起来有什么区别呢,今天就本着打破砂锅问到底的精神,好好来说说这个让人神魂颠倒的--函数声明.  函数声明 函数声明示例代码 function fn () { console.log('fn 函数执行..'); // code.. } 这样我们就声明了一个名称为fn的函数,这里出个思考,你认

浅谈JS变量声明和函数声明提升

先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按照传统眼光,console.log(a)输出的应该是undefined,因为var a在a = 2之后.但是,输出的是2. 再看第二段代码: console.log(a); var a = 2; 有人会想到第一段代码,然后回答undefined.还有人会认为a在使用前未被声明,因此抛出Referen

变量声明和函数声明提升,及有关的面试题

var getName = function(){ console.log(2); } function getName (){ console.log(1); } getName(); 上面输出结果为2 function getName(){ //函数声明提升到顶部 console.log(1); } var getName; //变量声明提升 getName = function(){ //变量赋值依然保留在原来的位置 console.log(2); } getName(); // 最终输出

[js]变量声明、函数声明、函数定义式、形参之间的执行顺序

一.当函数声明和函数定义式(变量赋值)同名时 function ledi(){ alert('ledi1'); }; ledi(); var ledi = function (){ alert('ledi2'); }; ledi(); 执行顺序: var ledi: function ledi(){ alert('ledi1'); }; //预编译结束 ============== ledi(); ledi = function (){ alert('ledi2'); }; ledi(); 函数

javascript的几种函数声明方式

1.第一种:典型的函数声明 function f(){ return 123; } alert(f());//调用 2.第二种:函数表达式 var add = function (){ return 123; } alert(add());//调用 3.第三种 var add = new Function("num"," return num+200"); //此时Function 这种方法用的比较少 alert(add(100));//300 调用

javascript中函数声明、变量声明以及变量赋值之间的关系与影响

函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 3.变量声明被提升到范围作用域的顶端 4.变量声明比函数声明的优先级高,变量声明优先于函数声明被提升,如果两者同名同时存在,后被提升的函数声明会覆盖先被提升的变量声明 5.变量赋值不会被提升,到执行行代码才开始赋值 补充: 6.调用javascript函数的整个过程可以分为预编译期(也叫声明期)和赋值期(也叫计算执行期). 预编译期完成对所有变量(包括形参.函数内部

关于Javascript中通过var关键字声明变量和function关键字声明函数的笔记

一.概念 1.变量声明 在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值): var a=1,b,c; //关键字显式声明变量a,b,c,并给a赋值console.log(a); //1 //由于b,c未定义变量类型,因此输出"undefined"console.log(b); //undefinedconsole.log(c); //undefined //如果变量未声明,则输出

对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

【JavaScript】Javascript中的函数声明和函数表达式

Javascript有很多有趣的用法,在Google Code Search里能找到不少,举一个例子: <script> ~function() { alert("hello, world."); }(); </script> 试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符『~』乍一看让人摸不到头脑,如果去掉它再运行则会报错:SyntaxError. 在阐述