0

我的 JS 代码为:

    $(function () { //line-1
     if(window.location.search.length >1){
    //doSomething ;
     areFieldsSet(); //call this function
    } //end of if 

    var areFieldsSet = function(){
    //do something
    }
    //do many things
   } // end of line-1 function

现在,当我尝试引用问题标题中描述的 areFieldsSet 函数时出现错误。我哪里错了?

4

2 回答 2

2

问题是您在调用它之后定义了该函数。

JavaScript 做了一些叫做“提升”的事情。看看这篇文章:JavaScript 中的变量和函数提升

规则有时会令人困惑,但基本上使用function x()符号的函数定义被隐式移动到顶部,变量定义也被移动,但不是它们的初始化!

例如,var x = 5;再往下的某个地方就像var x;是在代码块/函数的开头写的一样工作,但x = 5;更往下。所以x将在赋值之前定义,但值为undefined.

因此,您有两个选择:要么将areFieldsSet函数移到调用它的位置之上,要么将其更改var areFieldsSet = function()为 justfunction areFieldsSet()以使其有资格进行函数提升(而不仅仅是变量提升)。

于 2016-05-10T10:00:12.090 回答
1

Javascript 代码分两个阶段工作。

第一阶段 - 它用var关键字声明所有变量(仅声明,不初始化)和所有函数声明( function F() {} )。

第二阶段 - 它开始运行。

在您的代码中,您有函数表达式,而不是声明,因此当您尝试在线调用该函数时

  $(function () { //line-1
     if(window.location.search.length >1){
    //doSomething ;
     areFieldsSet(); //call this function
    } //end of if 

    var areFieldsSet = function(){
    //do something
    }
    //do many things
   }

JavaScript 引擎知道有一个名为areFieldsSet的变量(因为它是在第一阶段声明的),但是只有当您的代码能够实现

var areFieldsSet = function(){
        //do something
        }

所以当你试图像函数一样调用它时,你会得到错误,因为 JavaScript 不知道它是一个函数。

于 2016-05-10T10:02:03.393 回答