zoukankan      html  css  js  c++  java
  • js中Function的apply方法与call方法理解

    首先,function是一个指向Function对象,函数名是一个指向函数的指针。那么在函数体内,就会有一个作用域,即this关键字。
     
    this关键字指的是函数运行的作用域,举个例子来说,
     
    <script type="text/javascript">
            function funcA() {
                alert(this);
                alert("Function A");
            }
    </script>
    上面这段代码中的函数funcA定义在全局环境中,那么函数体内的this即window对象。
     
    下面该到call和apply的说明了。以call函数为例,call的第一个参数,就是改变函数的作用域,后面的参数为传入函数的所需的参数,必须与原函数的参数一直,举例说明:
     
    复制代码
    <script type="text/javascript">
            var testO = { name: "Lily" };
            function funcA(a,b) {
                alert(this);
                alert("Function A");
            }
     
            function funcB(a, b) {
                funcA.call(testO, a, b);
            }
     
            funcB(1,2);  //this变成了testO
        </script>
    复制代码
    我们定义funcB函数的中,调用了funcA的call函数,这个时候我们改变了funcA中this的指向,原本指向window的,现在指向了call的第一个参数testO这个对象。而且调用call时,因为funcA函数有两个参数,所以如果要想funcA传递参数,必须一一指出参数,即后面的两个参数a和b,或者可以只穿第一个参数
     
    即:funcA.call(testO);或者只传a,即:funcA.call(testO,a);
     
    而apply与call的区别仅在于,apply的第二个参数可以是数组形式,而且不必一一指出参数,funcA.apply(testO,[a,b])
     
     
     
    介绍完call与apply的基本用法,该说说他哥俩真正的用武之地了,扩充函数赖以运行的作用域。
  • 相关阅读:
    CF1174D Ehab and the Expected XOR Problem
    CF1083B The Fair Nut and Strings
    CF1088D Ehab and another another xor problem
    CF1168A Increasing by Modulo
    CF1166C A Tale of Two Lands
    CF1142A The Beatles
    CF1105D Kilani and the Game
    【uva11248】网络扩容
    【sam复习】用sam实现后缀排序
    【Educational Codeforces Round 19】
  • 原文地址:https://www.cnblogs.com/w10234/p/5408754.html
Copyright © 2011-2022 走看看