JS学习-06.函数,函数作用域

函数的调用方法

  1. 直接调用foo()
  2. 对象方法o.method()
  3. 构造器new Foo()
  4. call/apply func.call(o)

函数作用域与声明提前

  1. 函数具有函数作用域,变量在声明他们的函数体以及这个函数体嵌套的任意函数体都是有定义的
  2. 函数作用域指函数中声明的所有变量在函数体内始终可见,说明变量在声明前已经可用,这个现象是声明提前(hoisting).下面代码说明了局部变量在函数体中覆盖了全局变量
var sim = "one"
function f(){
    console.log(sim);//undefined
    var sim = "two";
    cosole.log(sim);//two
}

函数的声明&函数表达式

  1. 函数的声明:
    function add(a,b){
        a=+a;
        b=b++;
        if(isNaN(a||isNaN(b){
            return;
        }
        return a+b;
    }
    
  2. 函数表达式
    • var add = function(){}
    • (function(){})();立即执行函数
    • return function(){}
    • var add = function foo(a,b){}
  3. 函数是声明会带来函数提升,可以提前调用,表达式就不行
  4. 命名函数表达式
    var func = function nef(){};正常来说浏览器无法访问nfe()
  5. 使用函数构造器Function()从中引出的问题
    • localVal=“local”;console.log(localVal)’)()
      console.log(typeof localVal)
  6. 区别
    1. 函数声明有前置,在定义该函数的作用域可以通过函数名访问,不可立即调用,不可匿名,不可没有函数名
    2. 函数表达式允许匿名和立即调用,没有前置,不可通过函数名直接访问,不可没有函数名
    3. 函数构造器和函数表达式一样,但是不能有函数名

this(重点)

  1. 一般函数的this-function f1(){return this};f1()===window;
  2. 作为对象方法的函数
    var o ={prop:31;f:function(){return this.prop}}
    console.log(o.f());//通过对象名称调用方法,this指向对象本身
    
  3. 只要函数作为对象的方法去调用,那么this指向那个对象
    var o = {prop:37;}
    function imdepende(){return this.prop;}
    o.f = imdepende;
    console.log(o.f());
    
  4. 如果原型链上的this
    var o ={prop:31,f:function(){return
    this.a+this.b}};
    p = Object.create(o);
    p.a=1;
    p.b=2;
    console.log(o.f());//undefined原型中并没有
    console.log(p.f());//3说明此处this指向的是对象p
    
  5. 构造器中的this
    当我们使用new构造器创造一个函数时,this指向为该函数的prototype,如果没写返回值或者返回值是基本类型,那么this会作为返回值返回到实例中
    function MyClass(){
    this.a = 37
    }
    var o = new MyClass();
    console.log(o.a);//37
    function MyClass2(){
    this.a = 37
    return{a:32}
    }
    var i = new MyClass2;
    console.log(i.a);//32
    
6. call,apply,bind(稍后再写)

# 函数属性arguments


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值