4

2017-11-03  本文已影响0人  微风落叶111

闭包理解

闭包的两种应用情况:

  1. 函数作为返回值
function fn(){
         var max = 10;
         return function bar(x){
              if(x > max){
                   document.write(x);
              }
         };
} 
var f1 = fn();
f1(15);

bar函数作为返回值,赋值给f1变量
  1. 函数作为参数被传递
var max = 10;
fn = function(x){
              if(x > max){
                   document.write(x)
              }
       };
(function(f){
         var max = 100;
         f(15);
})(fn);

fn函数作为一个参数被传递进入另一个函数,赋值给f参数.执行f(15)时,max变量的取值是10,而不是100

浏览器的预处理

document.write(a);//默认值undefined;
var a = 10;

等价于

var a;
document.write(a);
a = 10;
document.write(f1);//function f1(){}
function f1(){}//函数声明

document.write(f2);//undefined
var f2 = function(){};//函数表达式

小例子

function a(){
        var n = 1;
        nAdd = function(){
            n += 1;
        }
        function b(){
        alert(n);
    }
        return b;
    }
    //var result = a();
    //result();
    //nAdd();
    //result();
    a()();

......

上一篇 下一篇

猜你喜欢

热点阅读