作用域
通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
全局作用域 | 局部作用域 |
全局有效 | 局部有效 |
作用于所有代码执行的环 境(整个script标签内部)或 者一个独的js文件。 | 作用于函数内的代码环境,就是局 部作用域。因为跟函数有关系,所以也称函数作用域。 |
注意:变量有一个坑,特殊情况:如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
变量的访问原则
•只要是代码,就至少有一个作用域
•写在函数内部的局部作用域
•如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
•访问原则;在能够访问到的情况下先局部,局部没有再找全局
匿名函数
匿名函数没有名字的函数,无法直接使用。
使用方式:
- 函数表达式
- 立即执行函数
1.函数表达式
将匿名函数赋值给一个变量,并且通过变量名称进行调用我们将这个称为函数表达式
语法:
let fn = function() {
//函数体
}
调用:
fn() //函数名()
其中函数的形参和实参使用和具体函数一致。
函数细节补充
- 两个相同的函数后面的会覆盖前面的函数
- 在Javascript中实参的个数和形参的个数可以不一致
如果形参过多会自动填上undefined(了解即可)
如果实参过多那么多余的实参会被忽略(函数内部有一个arquments,里面装着所有的实参)
例如:
function fn(a,b) {
console.log(a+b)
}
//(1).实参多余形参剩余的实参不参与运算
//fn(1,2,3)
//(2).实参少于形参 剩余的实参不参与运算
fn(1) //1 + undefined = NaN
- 函数一旦碰到return就不会在往下执行了函数的结束用return
例如:
//函数的返回值
functionfn(){
return20
}
//lfn()调用者相当于执行了fn()=20
//return的值返回给调用者
//console.log(fn())
//Let num = prompt('请输入数字')
//let re = fn()
//console.log(re)
//求和函数的写法
function getTotalPrice(x,y) {
return x + y
//return后面的代码不会被执行}
立即执行函数
场景介绍:避免全局变量之间的污染
语法:
//方式1
(function{ console.log(11)} )();
//方式2
(function{ console.log(11) }());
//不需要调用,立即执行
注意:多个立即执行函数要用;隔开
例如(两种方法):
//function(){}()()
(function (x, y) {
document.write(x * y)
})(1, 2);
//(function(){}())
(function (a, b) {
document.write(a + b)
}(22, 55));