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

results matching ""

    No results matching ""