js 回调函数

197 阅读1分钟

1.什么是回调函数(callback)呢?

把函数当作一个参数传到另外一个函数中,当需要用这个函数是,再回调运行()这个函数.它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用

    <script>
        function summation(n1, n2, callback) {
            var sum = n1 + n1;
            callback(sum);
        }
 
        function log (num) {
            console.log(num);
        }
 
        add(1, 2, log); //3
    </script>

分析:summation(1, 2, log);中,函数log作为一个参数传入到summation函数中,回调函数不会立即调用,而是var sum = n1 + n2运行完之后需要打印输出sum的时候才会调用这个函数。(这个作为参数传递到另外一个函数中,这个作为参数的函数就是回调函数.

2.回调函数有哪些特点?

1.不会立即执行

回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。和普通的函数一样,回调函数在调用函数数中也要通过()运算符调用才会执行。

2.回调函数是一个闭包

回调函数是一个闭包,也就是说它能访问到其外层定义的变量。

3.执行前类型判断

3.回调函数中this的指向问题

注意在回调函数调用时this的执行上下文并不是回调函数定义时的那个上下文,而是调用它的函数所在的上下文。

 <html>
      <body>
        <div id="div1">我是一个div</div>
      </body>
      <script>
        window.id = "window";

        document.getElementById("div1").onclick = function () {
          alert(this.id); // 输出:'div1'
          var callback = function () {
            alert(this.id); // 输出:'window'
          };
          callback();
        };
      </script>
    </html>

由此可见回调函数会被当做一个普通函数调用 this指向window