zoukankan      html  css  js  c++  java
  • 函数3---arguments对象

      arguments比较怪异,是个数组形式的对象,可以通过下表索引,比如arguments[0],arguments[1]等,但是它不是Array类型

    typeof( arguments )  // Object
    arguments instanceof Array //false
    arguments instanceof Object //true

      

      题目一:

    var employee = "Tom"
    function getInfo(){
        console.log(this.employee)      
    }
    
    var person = {
        employee:"Jack",
    
        getInfo:function(fn){
             fn();
             arguments[0](); // arguments对象调用fn,相当于obj.fn()形式 ;(第一次见这种形式,有点不习惯);
        },
    };    
    
    person.getInfo( getInfo, 2 );
    
    //输出结果
    “Tom”
    undefined

       细细体会,这个题目在考察 "函数执行时,this指向" 问题;关于this指向,请记住:哪个对象(上下文)调用了函数,这个函数中的this就指向谁;如果没有对象调用,this默认指向window(非严格模式下);跟函数在哪里定义无关;

      分析:

        在执行 fn()时,没有对象调用fn,在非严格模式下,fn中的this指向window;(严格模式下,此时this为undefined);

        在执行arguments[0]()时,arguments对象调用了fn,因此fn函数的this指向arguments对象,而不是person或者window;而arguments对象中没有employee,所以输出undefined

      题目二:

    var employee = "Tom"
    function getInfo(){
        console.log(this.employee)      
    }
    
    var person = {
        employee:"Jack",
    
        getInfo:getInfo,
    };    
    
    person.getInfo();
    //输出结果
    "Jack"

      细细体会,这两个题目在考察 "函数执行时,this指向" 问题;关于this指向,请记住:哪个对象(上下文)调用了函数,这个函数中的this就指向谁;如果没有对象调用,this默认指向window(非严格模式下);跟函数在哪里定义无关;

      题目二中,是person调用getInfo,所以这个函数的this指向person;

      arguments 的长度问题

    function Test(a,b,c){
        console.log(arguments)
    }
    
    Test(1,2)// 此时 arguments.length =2 而不是 3; arguments表示的是实参,而不是形参;

       区分函数长度、arguments长度; Test.length 为 3,表示形参长度; arguments.length表示实参长度

  • 相关阅读:
    关于jQuery动态多次绑定的问题及解决
    零基础英文盲打的建议
    29道Java简答题
    Redis分布式锁的实现(纯文字)
    小程序三级联动(动态获取数据)
    sql中按in中的ID进行排序输出
    layui中对表格操作按钮集的判断
    Linq改进
    C#前台直接调用后台数据时,<p>或双引号出现转义的问题
    sql 中sum函数返回null的解决方案
  • 原文地址:https://www.cnblogs.com/RocketV2/p/6732925.html
Copyright © 2011-2022 走看看