博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 函数(作用域以及闭包)
阅读量:5126 次
发布时间:2019-06-13

本文共 1435 字,大约阅读时间需要 4 分钟。

JavaScript 函数(作用域以及闭包)

 

・执行环境及作用域

 

 执行环境定义了变量或函数有权访问的其他数据。

  每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量或函数都保存在这个对象中,

  虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。

 

  当代码在一个环境中执行时,会创建变量对象的一个作用域链。

  作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问;

  作用域的前端始终是当前执行的代码所在环境的变量对象。

 

・函数表达式

 

  定义函数的两种方式: 函数声明和函数表达式

 

  函数声明的重要特征是函数声明提升,及在执行代码之前会先读取函数声明。

  sayHi();

  function sayHi() {

        ......

  }

 

・闭包

  概念: 有权访问另一函数作用域中的变量的函数。

 

function(value1, value2) {    if(value1 < value2) {        return -1;    } else if(value1 > value2) {        return 1;    } else {        return 0;    }}var result = compare(5, 10);

 

 

  闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。

 

  另一个副作用: 闭包只能取得包含函数中任何变量的最后一个值。因为闭包所保存的是整个变量对象,而不是某个特殊的变量。

 

function createFunctions() {  var result = new Array();    for(var i=0; i<10; i++) {    result[i] = function() {      return i;    };  }  return result;}

  返回的函数数组中的每个函数的返回值都为10。

  解决方案

 

function createFunctions() {  var result = new Array();  for(var i=0; i<10; i++) {    result[i] = (function(num) {      return function() {        return alert(num);      };    })(i);  }  return result;}

 

・this对象

  全局函数中,this等于window;

  函数被作为某个对象的方法调用时,this等于那个对象;

  匿名函数的执行环境具有全局性,this通常指向window。

 

var name = "The Window";var object = {  name: "My Object",  getNameFunc: function() {    return function() {
this.name;}; }};alert(object.getNameFunc()());// 执行结果: The Window

  第一步 object.getNameFunc()作为函数方法调用,this指向的是object;

  第二步 object.getNameFunc()()作为匿名函数调用,this指向的是window;

 

转载于:https://www.cnblogs.com/dreamerjdw/p/6233534.html

你可能感兴趣的文章
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>