【JS】为什么我定义的函数不能执行IF语句里面的

JavaScript013

【JS】为什么我定义的函数不能执行IF语句里面的,第1张

1、函数定义的方式方式分为两种,一种是函数声明,一种是函数表达式。

// 函数声明的方式

function myfunc1() {

    // todo

}

// 函数表达式的方式

var myfunc2 = function () {

    // todo

}

函数声明的方式会在js解析预编译阶段得到提升,不管是写在调用之前还是调用之后,使用的时候都可以找到函数;函数表达式,和普通的定义变量一样,js自上而下执行,当执行到这条语句时,函数才有定义。

2、数组里的大写字母去掉。遇到这种情况,就要考虑使用倒序的方式去遍历删除,因为每删除一项,数组长度就会变化,正序遍历就会导致错误。

var x2 = ["a", "b", "C", "d", "E", "f"]

for (var l = x2.length, i = l - 1 i >= 0 i--) {

if (x2[i] >= "A" && x2[i] <= "Z") {

x2.splice(i, 1)

}

// 输出 a,b,d,f

console.log(x2.join())

js一直提示函数未定义是设置错误造成的,解决方法为:

1、新建一个html文件,命名为test.html。

2、在test.html文件内,在p标签内,使用input标签创建两个数字输入框,并分别设置其id为num1,num2,主要用于下面通过该id获得input对象。

3、在test.html文件内,使用button标签创建一个按钮,按钮名称为“相加”。

4、在test.html文件中,给button按钮绑定onclick点击事件,当按钮被点击时,执行numsum()函数。

5、在js标签中,创建一个名称为jia()的函数,它的参数分别为a和b,在函数内,通过return返回a参数与b参数相加后的值。

6、在js标签中,再创建一个numsum()函数,在函数内,使用getElementById()通过id获得input对象,并使用value属性获得输入的数字,然后调用jia()函数,并将num1和num2两个值传递给jia()函数进行相加,最后,使用alert()方法输出相加的结果。

在JS中函数的定义可以分为两种:

1. 函数声明

2. 函数表达式

根据你的代码,下面的代码就是函数的声明(当然另外一段代码是函数表达式):

function a (){

alert(123)

}

根据JS中的语法特性(注意哦,是js的语法特点,要记住):

在javascript函数体内(执行作用域)声明的变量,无论在函数体何处声明,它将都会被提升到函数的顶部,我们称这种现象为变量提升。 函数呢,它也有这种特性,即无论在函数体何处声明另一个函数,它将都会被提升到函数的顶部。只是采用函数表达式和函数声明所体现的函数提升的内容是有差别的:函数表达式和变量提升类似,只会提升函数的变量,不提升函数的定义;而函数声明提升时,不仅仅会提升函数的声明,函数的定义也会被提升

根据以上特性,你的代码在执行时,

function a (){

alert(123)

}

这段代码被提升到执行作用域的顶端,最开始被执行;

然后,在执行

var a =function(){

alert('234')

}

这段代码,导致该代码覆盖了前面的函数声明代码;

不信你可以做个测试:

将a()放到js代码的最顶端,可以看看会打印什么结果,此时你就明白了!