全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS作用域闭包、预解释和this关键字综合实例解析

本文实例分析了JS作用域闭包、预解释和this关键字。分享给大家供大家参考,具体如下:

var number = 2;
var obj = {number : 5,
  fn1 : ( function() {
  this.number *= 2;
  number=number*2;
  var number=3;
    return function() {
      this.number *= 2;
      number*=3;
      alert(number);
    }
  } )()
};
var fn1 = obj.fn1;
alert(number);
fn1();
obj.fn1();
alert(window.number);
alert(obj.number);

【解析】

1. fn1本身后面就有(),所以var fn1 = obj.fn1;时他已经被执行,但是里面的return function并没有被执行

2. alert(number);输出全局的number,本来是2,经过var fn1 = obj.fn1;后,相当于执行了

this.number *= 2;
number=number*2;
var number=3;

这三句话

注意:任何一个直接执行的匿名方法,他的this指向window

所以this.number *= 2;使得全局变量变成4,即输出4

而number=number*2;他是去看作用域块里的number,var number=3;作用域声明在先,但是没有赋值,所以number=number*2;这句话其实没用

3. 执行到fn1();就是执行fn1里面的return function,也就是这三句话

this.number *= 2;
number*=3;
alert(number);

这时候依然是个匿名方法,所以this.number *= 2;使得全局变量变为8,number*=3;去找作用域块里的number,外层定义number为3,所以alert(number);就是9,如果是alert(this.number);则指向全局变量,即输出8

4. obj.fn1();,依然执行fn1里面的return function,也就是这三句话

this.number *= 2;
number*=3;
alert(number);

但这时this指向obj,this.number *= 2;使得obj里的number变为10,number*=3;还是去找作用域块,由于上面变为9,所以这里就是27,alert(number);输出的是作用域块的number,即27,如果是alert(this.number);则指向obj的number,即输出10

5. alert(window.number);经过上面几轮,全局变量变为8(即执行obj.fn1();对全局变量无影响)

6. alert(obj.number);只有这句话obj.fn1();,改变了obj.number,所以输出10

(function(){
   var a=10;
  fn();
  function fn(){
    var a=a+10;
    console.log(a);
     return a;
  }
  console.log(a);
  console.log(fn()+10);
})();

fn函数里的a先被声明但是没有赋值,然后进行运算,他不会去找函数外面的同名变量,因为他已经在里面被声明了。一个不是数字的和数字进行运算,输出NaN

console.log(fn()+10);这句话要输出两个值:console.log(fn());和console.log(fn()+10);

结果:

NaN
10
NaN
NaN

如果题目改成

(function(){
  var a=10;
  fn();
  function fn(){
    a=a+10;
    console.log(a);
    return a;
  }
  console.log(a);
  console.log(fn()+10);
})();

结果:

20

20

30

40

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JS  # 作用域  # 闭包  # 预解释  # this关键字  # JS作用域作用链及this使用原理详解  # javascript中的this作用域详解  # 深入理解js函数的作用域与this指向  # js中的this作用域全解析  # 全局变量  # 这句话  # 句话  # 这三  # 去找  # 的是  # 是个  # 相关内容  # 他是  # 就有  # 遍历  # 他不  # 感兴趣  # 数据结构  # 去看  # 为他  # 给大家  # 任何一个  # 在里面  # 会去 


相关文章: 建站主机选虚拟主机还是云服务器更好?  建站主机与虚拟主机有何区别?如何选择最优方案?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  如何挑选优质建站一级代理提升网站排名?  ,想在网上投简历,哪几个网站比较好?  如何快速上传建站程序避免常见错误?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  如何配置FTP站点权限与安全设置?  建站之星安装后如何自定义网站颜色与字体?  北京网站制作的公司有哪些,北京白云观官方网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  安徽网站建设与外贸建站服务专业定制方案  如何在西部数码注册域名并快速搭建网站?  如何快速搭建FTP站点实现文件共享?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  相册网站制作软件,图片上的网址怎么复制?  如何在阿里云通过域名搭建网站?  简单实现Android文件上传  如何选择最佳自助建站系统?快速指南解析优劣  广州美橙建站如何快速搭建多端合一网站?  金*站制作公司有哪些,金华教育集团官网?  建站之星安装需要哪些步骤及注意事项?  如何快速搭建虚拟主机网站?新手必看指南  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在IIS中新建站点并配置端口与物理路径?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  阿里云网站制作公司,阿里云快速搭建网站好用吗?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何规划企业建站流程的关键步骤?  如何在IIS中新建站点并配置端口与IP地址?  如何在IIS管理器中快速创建并配置网站?  如何在万网自助建站中设置域名及备案?  建站之星安装模板失败:服务器环境不兼容?  如何快速搭建自助建站会员专属系统?  再谈Python中的字符串与字符编码(推荐)  Swift中switch语句区间和元组模式匹配  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何选择CMS系统实现快速建站与SEO优化?  广州商城建站系统开发成本与周期如何控制?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  定制建站如何定义?其核心优势是什么?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  html制作网站的步骤有哪些,iapp如何添加网页?  如何在香港服务器上快速搭建免备案网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。