函数知识点补充及函数的吊装

函数知识点补充:

  1. 函数的参数的默认值
function fa(x=6){
    console.log(x)
  }

调用fa()时,本来需要传入一个参数,但没有传任何参数,此时上述函数就会使用参数的默认值。如果没有定义参数的默认值,也没有传参数,那么就是undefined。

  1. 写在if语句中的函数声明,在预编译阶段不会被提到上面,要在if语句执行之后,才会把这个函数提到上面。所以要在if语句执行之后,调用这个函数才有用。
    在for语句中函数声明也是一样。

  2. 函数内部没有使用var 定义变量x,会把x转为全局变量。
    但是这样会报错

console.log(x)
function fa(){
      x=10; 
    }

先调用一遍fa(),才会把x转为全局变量。这样就不会报错

fa()
console.log(x)
function fa(){
      x=10; 
    }
  1. 非匿名的立即执行函数
var foo=1;
(function foo(){
    foo=10;
    console.log(foo)
  })()
  console.log(foo)

立即执行函数里面打印foo函数;
外面打印1;
当JS解释器遇到了非匿名的立即执行函数时,会创建一个辅助的特定对象,然后将函数名作为这个对象的属性,因此函数内部才可以访问到foo,但这个值又是只读的,对它的赋值并不生效,并且外部的值也没有发生改变。

  1. arguments.callee
    相当于函数本身,指向当前正在执行的函数
    可以用来指定匿名函数自身。

函数的吊装(函数的提升)
1、

var a=1;
 function b(){
    a=10;
    return;
    function a(){}
  }
  b();
  console.log(a)

打印结果将是1;
函数内部的a函数声明会提升到函数的最上面,a成为函数内的局部变量,所以外面的全局变量a就被覆盖了。
所以在函数外打印a将打印1
2、

function ba(){
    console.log(x)
    function x(){}
  }
  ba()

打印结果为x函数;
同案例1一样,函数内的函数声明x被提升到函数内的最上面,所以执行ba()时,打印x就将打印x函数。
3、

function da(){
    console.log(x);
    var x=function(){}
  }
  da()

打印结果为undefined
此结构同案例2类似,但是很不一样,函数内的函数表达式的值不会提升到函数最上面,在上下文的创建阶段,它只会提升这个变量,var x,但是没有给x赋值,赋值要等到执行阶段,执行这个赋值语句的时候才会发生。所以打印结果为undefined。
浏览器分两遍来处理Javascript代码:
1)浏览器分析所有的函数声明,并定义这些函数声明所创建的函数;
2)浏览器按从上到下的顺序执行代码,并定义函数表达式创建的函数。
4、

 function ca(){
    console.log(x);
    var x=1
  }
  ca()

此案例同案例3一样。

5、

var x=20;
function x(){};
console.log(x)

打印20;
6、

console.log(x)
var x=20;
function x(){};

打印x函数

7、

function fa(x){
console.log(x);
var x=10;
}
fa(5)

打印5
8、

function fa(x){
var x=10;
console.log(x);
}
fa(5)

打印10;
函数内部定义的与形参同名的变量覆盖了形参。
9、

function fa(x){
console.log(x);
function x(){};
}
fa(5)

打印x函数;
同案例7的区分。

10、

function fa(x){
var x=10;
console.log(x);
function x(){};
}
fa(5)

打印10;
函数声明提升到最前,然后var x声明覆盖了函数声明。

11、

var a=0;
  function fa(){
    if(false){
      var a=1;
    }
    console.log(a)
  }
  fa();

打印undefined;
if语句中的var a被提升到前面(没有赋值);不会使用全局变量a了。
但是永远也执行不到if语句中,所以就永远不能给a赋值,所以打印undefined。

12、

function fa(a){
    console.log(a);
    function a(){};
    var a=10;
  }
  fa(100)

打印a函数;
函数内a的定义顺序
var a
var a=100;
var a=function(){};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值