JS中函数名后面的括号加与不加的区别和作用

JavaScript017

JS中函数名后面的括号加与不加的区别和作用,第1张

加括号为调用该函数,返回值为函数返回值;

不加括号可认为是查看函数完整信息,即查看整个函数体,返回值即整个函数体,不加括号传参相当于传入函数整体

function test() {

return "test"

}

分别打印

test: function test() {return "test"} //函数表达式

test(): test //函数执行结果

两者没区别。f2所加的括号,相当于算术表达式(逻辑表达式也一样)中的括号,比如 x = 1+2 和 x = (1+2) 是没区别的,但如果是 x = (1+2)*3 这个括号就不能去掉了。说白了,括号的作用就是为了改变表达式中的运算符的默认优先级,如果加了括号和不加括号对运算符的优先级没有影响,那么就可以不加括号,加了反而是脱裤子放屁多余了。你题目中给f2赋值的是个函数,函数也是对象,也是一个表达式,所以是可以在外面加个括号的,只是并没什么卵用而已!

function fun(){

return 5

}

var a=fun

var b=fun()

a是fun函数,b是5

JS中我们把以上代码加粗的部分叫做函数,函数是一种叫做function引用类型的实例,因此函数是一个对象。对象是保存在内存中的,函数名则是指向这个对象的指针。

var a = fun 表示把函数名fun这个指针拷贝一份给变量a,但是这不是指函数本身被复制了一份。

就好比,地图上上海市(对应函数对象)只有一个,但指向上海市的路标(对应指针)有很多,而且你还可以继续添加(复制)无数个指向上海市的路标,但上海市本身不会被复制。

如果函数名后面加上圆括号就表示立即调用(执行)这个函数里面的代码(花括号部分的代码)。

另外函数声明和函数表达式在私有作用域写法方面也会在函数体后面加圆括号表示立即调用这个函数,题主可以参看JS的模仿块级作用域的知识。