美文网首页
浅析一个函数调用另一个函数的变量

浅析一个函数调用另一个函数的变量

作者: scarqin | 来源:发表于2017-07-06 12:09 被阅读387次

js中一个函数中调用另一个函数,内部函数怎么访问外部函数的变量?
无意中逛到这个问题,突然发现自己以前也有这样的困惑

function a(){ alert(num);   }
function b(){  
      var num=3;
      a();
  }
b();   //num is not defined

a函数不是b的内部函数(闭包),而是全局函数。所以对于a函数来说,即使你b在内部调用了我a,我a还是访问不了你b。
说到底就是作用域问题,所以我想到了改变作用域的方法

call(),apply(),bind()

实现

function a(){ alert(num);   }
function b(){  
      var num=3;
      a.call(b);
  }
b();  // num is not defined

尝试了很多次,都无法获取到b,原来我对这些方法理解有误,查阅文档,发现此类方法主要作用是,对象调用不属于自己的方法,例如下例:
food函数是没有product方法,使用call对food的上下文进行product操作

//mozilla官方用例
function Product(name, price) {
  this.name = name;
  this.price = price;
}

function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}

function Toy(name, price) {
  Product.call(this, name, price);
  this.category = 'toy';
}
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

使用闭包

闭包就不多说了,一个函数内部定义(不是调用)另一个函数
内部函数可调用外部函数的变量,作用域链的延长

改写


function b(){  
      var num=3;
      function a(){ alert(num);   }
      a();
  }
b();  //3

传参

function a(num){ alert(num);   }
function b(){  
      var num=3;  
      a(num);
  }
b();  //3

return

function a(){ alert(b());   }

function b(){
var num=3;
return num;
}
a();

总结

一般来说,a是复用的函数,才会有此类用法,传参实现即可。

参考资料

深入浅出妙用 Javascript 中 apply、call、bind
学习Javascript闭包(Closure)
call()方法

相关文章

  • Python:内置高阶函数

    高阶函数: 变量可以指向函数,函数参数可以传变量,所以一个函数可以调用另一个函数作为参数,这种函数称之为高阶函数 ...

  • python之回调函数和装饰函数

    一.回调函数 1.回调函数的概念: 是在某一函数中调用另一个函数变量方式,来执行函数.回调函数不是有实现方调用,...

  • 浅析js闭包~

    用一句话说明什么是闭包,闭包就是一个函数可以调用另一个函数的变量。闭包有个特性就是当调用另一个函数的变量的时候,如...

  • extern详解

    目录 1同一个工程一个c文件函数调用另一个c文件函数 2 c文件调用另一个c文件变量 3 c++调用c函数 4 c...

  • 浅析一个函数调用另一个函数的变量

    js中一个函数中调用另一个函数,内部函数怎么访问外部函数的变量?无意中逛到这个问题,突然发现自己以前也有这样的困惑...

  • 02 函数

    1.类型 回调函数 变量函数:支持使用定义变量加+()方式调用函数; 匿名函数:函数赋值给变量,通过变量调用,同上...

  • 闭包Closure

    闭包指的是有权访问另一个函数作用域中变量的函数。 ###函数调用过程(第一次被调用时) 1. 创建执行环境(exe...

  • 闭包函数

    闭包函数指有权访问另一个函数作用域中的变量的函数在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量函...

  • JavaScript 函数

    函数函数定义与调用变量作用域全局变量方法高阶函数闭包箭头函数$generator$ 函数 函数定义与调用 定义函数...

  • 函数式编程

    高阶函数 变量可以指向函数 变量f指向了abs函数本身。直接调用abs()函数和调用变量f()完全相同。 函数名也...

网友评论

      本文标题:浅析一个函数调用另一个函数的变量

      本文链接:https://www.haomeiwen.com/subject/wbthhxtx.html