Uncaught TypeError: areFieldsSet is not a function
Uncaught TypeError: areFieldsSet is not a function
我的 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 函数时出现错误。
我哪里错了?
问题是你在调用函数后定义它。
JavaScript 做一些叫做 "hoisting" 的事情。看看这篇文章:Variable and Function Hoisting in JavaScript
规则有时会令人困惑,但基本上使用 function x()
符号的函数定义被隐式移到顶部,变量 definitions 也被移动,但是不是他们的初始化!
例如,var x = 5;
更往下的某处将像 var x;
写在代码 block/function 的开头一样工作,但 x = 5;
更往下。所以 x
会在赋值之前定义,但是值为 undefined
.
因此,您有两个选择:要么将 areFieldsSet
函数移至调用它的位置上方,要么将其从 var areFieldsSet = function()
更改为仅 function areFieldsSet()
,这将使它有资格进行提升(而不仅仅是变量提升)。
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 不知道它是一个函数。
我的 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 函数时出现错误。 我哪里错了?
问题是你在调用函数后定义它。
JavaScript 做一些叫做 "hoisting" 的事情。看看这篇文章:Variable and Function Hoisting in JavaScript
规则有时会令人困惑,但基本上使用 function x()
符号的函数定义被隐式移到顶部,变量 definitions 也被移动,但是不是他们的初始化!
例如,var x = 5;
更往下的某处将像 var x;
写在代码 block/function 的开头一样工作,但 x = 5;
更往下。所以 x
会在赋值之前定义,但是值为 undefined
.
因此,您有两个选择:要么将 areFieldsSet
函数移至调用它的位置上方,要么将其从 var areFieldsSet = function()
更改为仅 function areFieldsSet()
,这将使它有资格进行提升(而不仅仅是变量提升)。
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 不知道它是一个函数。