【摘要】:JavaScript的function关键字用于声明具名函数和匿名函数,具名函数可以直接使用,匿名函数需要赋值给变量或属性才能使用,语法格式如下:语法格式说明:◇ functionName是函数名,与变量名一样必须是合法的标识符,不能与变量名重名。图7.1.2函数声明位置函数init() 内部声明函数 innerFunction() ,在该函数内可以正常调用。
JavaScript的function关键字用于声明具名函数和匿名函数,具名函数可以直接使用,匿名函数需要赋值给变量或属性才能使用,语法格式如下:
语法格式说明:
◇ functionName是函数名,与变量名一样必须是合法的标识符,不能与变量名重名。
◇ 从arg0到argN是参数列表,参数与变量一样必须是合法的标识符;参数名如果与函数内部的变量名重名,会被变量覆盖。
◇ statements是函数体,用于实现函数的功能;statements可以包含1到N个return语句,最终只有一个生效,如果没有return语句,则默认返回undefined。
7.1.1.html将问好语句封装成函数sayHello(),向不同的人打招呼,如下所示。
动手写7.1.1
执行7.1.1.html,输出结果到网页,如下图所示。
图7.1.1 函数声明语句
函数可以在代码顶部、尾部声明,也可以在控制语句内声明,还可以在函数内声明函数。函数声明语句是静态语句,声明时不会立刻执行,因此一般在顶部、尾部和函数内部声明函数,很少在控制语句内声明函数。
7.1.2.html在不同位置声明函数,如下所示。
动手写7.1.2
使用IE9浏览器执行7.1.2.html,输出结果到网页,如下图所示。
图7.1.2 函数声明位置(IE9)
函数init() 内部声明函数 innerFunction() ,在该函数内可以正常调用。
虽然代码if ('X' > 'Y') 不成立,但上述代码在IE9版本中可以正确运行。动手写7.1.2在控制语句中声明具名函数,会造成歧义,而且大部分新版的浏览器已不支持提升在控制语句中声明的函数。
使用Chrome浏览器执行7.1.2.html,在浏览器控制台可以看到函数不存在的提示,如下图所示。(www.chuimin.cn)
图7.1.3 函数声明位置(Chrome)
在Chrome浏览器中,因为if (1 > 2) 不成立,所以函数sayHello()没有声明,调用该函数触发错误“Uncaught TypeError: sayHello is not a function”,因此不要在控制语句中声明具名函数。
7.1.3匿名函数一节将介绍在控制语句中声明匿名函数。
JavaScript允许重复声明函数,重名函数不会根据参数进行重载,而是覆盖之前声明的函数。
7.1.3.html声明同名函数,如下所示。
动手写7.1.3
执行7.1.3.html,后续声明的函数将覆盖之前声明的函数,在IE和Chrome浏览器中结果都是一样的,如下图所示。
图7.1.4 重复声明函数
在一个<script>标签内,最后出现的重名函数被提升到顶部,同时覆盖其他同名的函数。
7.1.4.html在不同<script>标签内声明同名函数,如下所示。
动手写7.1.4
执行7.1.4.html,输出结果到网页,如下图所示。
图7.1.5 在多个标签重复声明函数
在每个标签内运行时,重名函数不会立刻被覆盖,但最终在运行其他标签的代码时,会覆盖已经声明的同名函数。浏览器端的JavaScript对分包分模块还不够成熟,声明函数时需注意已有的全局函数,不要覆盖。
同样地,引入其他JavaScript文件,也可能覆盖已声明的函数,常见的做法是将所有函数封装到一个匿名函数中执行。7.1.3一节将详细介绍匿名函数。
相关推荐