函数声明与函数表达式的区别
26.js编写时遇到个问题:下面这两种写法竟然有区别,第一种写法无法正常使用CSS选择符???
let myGet = document.querySelectorAll;
function myGet(elmSel) {
return document.querySelectorAll(elmSel);
}
//TypeError: Illegal invocation
- 涉及函数提升。函数声明会将整个函数定义都提升,但是函数表达式只提升对变量的声明,变量的赋值并未得到提升。
- 函数声明的函数提升会影响代码内在逻辑,应尽量避免使用
比如下例:无视函数声明???变量提升!!!
var a = function b(){
return "expression"
}
function a(){
return "function"
}
console.log(a) //ƒ b(){return "expression"}
- 函数表达式作为语句可以用在任何地方,包括if块等。
- 函数名可以进行覆盖之前的声明,相当于函数名变量指向不同的内存,函数名也可以指向其他类型的变量。但是如果去声明,反而会
SyntaxError: Identifier 'XXX' has already been declared
。
其他
- 函数若未调用,即使声明出错也不会报;当然如果有行末出现逗号这种大的错误还是会报。
网友评论