15、函数经典题
1、匿名函数如果设置了函数名 ,在外面是无法调用的,但是在函数里面是可以调用的
2、而且类似于创建常量一样,这个名字存储的值不能再被修改(非严格模式下不会报错,但是不会有任何效果,严格模式下直接报错,可以把AAA理解成为const声明的常量)
let fn = function AAA(){
console.log(AAA) //方法本身;但是这里如果使用严格模式的话也会报错
}
AAA() //Uncaught ReferenceError: AAA is not defined
写出下面输出:
var b = 10;
(function b(){
b = 20;
console.log(b) //非严格模式下不报错,但是存储的值不被修改。因此还是方法b
})()
console.log(b) //10
修改方法,使匿名函数中的b输出20,但是外面的还是输出10;
方法的私有变量一般有两个写法:带var的,或者形参赋值
//分析:里面的b一定是私有的不能是全局的。方法的私有变量一般有两个写法:带var的,或者形参赋值
var b = 10;
(function b(){
var b = 20;
console.log(b) //20带名称的匿名函数中如果一旦私有声明,名称变量就跟原函数无关了;这里使用let、const也行
})()
console.log(b) //10
//上面这种也可以直接给它传入一个形参
var b = 10;
(function b(b){
b = 20;
console.log(b)
})()
console.log(b) //10
如果把带名称的匿名函数的名称去掉,函数里面的b变成全局的了
var b = 10;
(function (){
b = 20;
console.log(b) //20
})()
console.log(b) //20