<script> var m= 1, j = k = 0; function add(n) { return n = n+1; } y = add(m); function add(n) { return n = n + 3; } z = add(m); </script>
2,4
4,4
2,2
报异常
js里面没有函数重载的概念,在其他语言中(如java)java中,可以存在同名函数, 只要传入的参数数量或者类型不同即可。在js中,定义了两个同名函数后, 后面的函数会覆盖前面定义的函数。结合这道题来说,由于函数声明提升, 所以函数声明会提前,由于存在同名函数,后面的add函数将覆盖第一个add函数, 所以两次调用add()返回的值是相同的。也就是y,z都为4.
考察两个知识点:1.函数声明提升,浏览器解析的时候会首先对声明函数优先解析,记住是声明函数,而不是匿名函数!因此调用函数的位置可以放在前面! 2.考察函数没有重载的问题。简单的说没有重载就是每个函数的函数名只是指向函数的指针,因此再次命名相同函数名的函数时,就相当于改变了指针内的内容。看起来就像是第二个把第一个覆盖了。 个人理解,参考
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题