• 函数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表示实参长度

  • 相关阅读:
    win 10 神州网信开启远程
    正则表达式
    java开发软件的安装
    Web 安全攻防渗透测试实战指南笔记之环境和工具
    Web 安全攻防渗透测试实战指南笔记之信息收集
    ME2N增强
    MSSC 扩充物料库存地点
    ABAP步循环
    MB21 创建预留
    COOIS增强
  • 原文地址:https://www.cnblogs.com/RocketV2/p/6732925.html
Copyright © 2020-2023  润新知