范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Js基础27作用域

  函数和变量的有效范围就是作用域
  1、作用域的概念  var a = 10;  function f1(){    console.log(a);  }  f1();// 变量a在函数外定义,可以在函数内使用    function f2(){    var b = 20;  }  console.log(b); // 变量b在函数内定义,在函数外无法访问,报错:b is not defined
  这是因为js中存在作用域的概念。
  作用域:
  作用域就是指定一个变量或者一个函数的作用范围。
  能在页面的任何位置都可以访问,称为 全局作用域
  只能在局部(函数内)访问,称为为 局部作用域
  在全局作用域下声明的变量,称为 全局变量
  在局部作用域下声明的变量,称为 局部变量
  上述代码中,a是全局变量,b是局部变量
  ES5中只有函数才有作用域,所谓是局部作用域也可以叫函数作用域。
  作用域的作用就是为了把数据进行保护,不让外部的数据对我们的数据进行污染
  2、函数和变量声明的提升
  在JS中存在一个很重要的特性,函数和变量声明的提升。怎么理解声明提升呢?我们先来看一道面试题:
  以下①②③④打印什么? console.log(a);//①  var a = 123;  console.log(a);//②    console.log(f);//③  f();//④  function f() {      console.log("函数声明提升");  }
  ①处的代码如果按照我们以前的理解,代码从上而下执行,那么在执行这行代码的时候,a还没有被声明,所以直接访问一个没有被声明的变量,程序应该报错。
  但是结果却大出所料,这里得到的结果是undefined。
  ③处的结果也和我们最初的认识是不一样的,结果为f对应的函数对象。
  造成这个结果是因为变量和函数的作用域提升的原因,什么意思呢?
  JS是解释性语言,JS引擎对代码的处理分为两步:预解析处理: 在代码执行之前,对代码做全局扫描,对代码中出现的变量和函数提前声明处理;   // 上面代码预解析后会变成这样:
  var    a  ; //变量提前声明,但不初始化
  //函数提前声明
  function    f  () {
  console  . log  ( "函数声明提升"  );
  }
  console  . log  ( a  ); //undefined
  a    =    123  ;
  console  . log  ( a  ); //123
  console  . log  ( f  ); //函数对象
  f  (); //函数声明提升   调用执行: 然后自上而下的执行代码
  3、声明提升的规则
  声明提升是将变量或者函数的声明提升到当前作用域的最顶端。在具体使用的过程中存在以下需要注意的细节。变量和变量同名,解析之后只存在一个当前变量的声明。   console  . log  ( a  );
  var    a    =    123  ;
  console  . log  ( a  );
  var    a    =    456  ;
  console  . log  ( a  );  解析之后:   var    a  ;
  console  . log  ( a  ); //undefined
  a    =    123  ;
  console  . log  ( a  ); //123
  a    =    456  ;
  console  . log  ( a  ); //456   函数和函数同名,后面的声明将前面的覆盖。   f  ();
  function    f  () {
  console  . log  ( "1"  );
  }
  f  ();
  function    f  () {
  console  . log  ( "2"  );
  }
  f  ();
  function    f  () {
  console  . log  ( "3"  );
  }  解析之后:   function    f  () {
  console  . log  ( "3"  );
  }
  f  (); //3
  f  (); //3
  f  (); //3   函数和变量同名,只有函数声明提升,忽略变量的声明。   console  . log  ( a  );
  var    a    =    123  ;
  console  . log  ( a  );
  function    a  () {}
  console  . log  ( a  );
  function    a  () {}
  console  . log  ( a  );  解析之后:   function    a  () {}
  console  . log  ( a  ); //函数a
  var    a    =    123  ; //将前面的函数覆盖,a的值变为123
  console  . log  ( a  ); //123
  console  . log  ( a  ); //123
  console  . log  ( a  ); //123   如果是命名函数,则只将前面的变量声明提升,函数不动。   console  . log  ( fn1  );
  function    fn1  () {
  }
  console  . log  ( fn1  );
  console  . log  ( fn2  );
  var    fn2    =    function   () {
  }
  console  . log  ( fn2  );  解析之后:   function    fn1  () {
  }
  var    fn2  ;
  console  . log  ( fn1  ); //fn1函数
  console  . log  ( fn2  ); //undefined
  fn2    =    function   () {
  }
  console  . log  ( fn2  ); //fn2函数
  其他问题   var    a    =    b    =    c    =    9  ; // 从右往左赋值
  // 不适用var 声明变量 不管在哪里都是全局变量
  function    fn  (){
  a    =    10  ;
  }
  4、作用域链和访问规则
  在JavaScript里面,函数内部是可以包含另一个函数的 function a(){      function b(){         }    }
  此时函数b就被函数a包含越来了,这样就形成了两层作用域。
  如果有以下代码:三个同名变量放在三个作用域内 var x = 10;  console.log(x);  function a(){    var x = 20;    console.log(x);    function b(){      var x = 30;      console.log(x);   }    b();  }  a();
  会依次输出:10,20,30
  虽然多个变量x同名,但是不同作用域内优先使用自己内部作用域的变量x。
  如果代码做一下修改:删除函数b的局部变量x var x = 10;  console.log(x);  function a(){    var x = 20;    console.log(x);    function b(){      console.log(x);   }    b();  }  a();
  依次输出:10,20,20
  函数b内部没有变量b,会向自己的外面的作用域查找x变量,函数a内的x变量离函数b最近,会优先得到函数a的变量x
  代码再做修改:再删除a的局部变量x var x = 10;  console.log(x);  function a(){    // 函数a内部的变量x也没有了    console.log(x);    function b(){      // 函数b内部没有x变量了      console.log(x);   }    b();  }  a();
  会依次输出:10,10,10
  函数b内部没有x变量,会向函数a的作用域查找,但是函数a内部也没有x变量,会向函数a的上一层作用域再查找,直到查找到了全局作用域。
  代码再次变化:全局的变量x也删除 // 全局的变量x也没有了  function a(){    // 函数a内部的变量x也没有了    function b(){      // 函数b内部没有x变量了      console.log(x);   }    b();  }  a();
  函数b内部没有变量x,会顺着上层作用域一层一层地查找,直到全局作用域也没有,就会报错。
  总结:只有函数可以制造作用域链结构 只要是代码,就至少有一个作用域,即全局作用域。 凡是代码中有函数,那么这个函数就构成另一个作用域。 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。 将这样的所有的作用域列出来,可以有一个结构:函数内指向函数外的链式结构——作用域链。 由内而外的访问规律,一直向外找,找不到,报错。

全球手机市场销量洗牌华为落榜苹果重返第二,中国品牌独占3席文Dong审核子扬校对知秋11月26日,Gartner发布2021年第三季度全球售给终端用户智能手机数量排行榜。根据Gartner发布的统计数据显示,2021年第三季度,全球手机市苹果这么强势,华为会不会完全放弃海外市场?说实话,每每回答这类问题时,我都很奇怪,不明白提问的人是怎么想的?不明白为什么有这么多人喜欢为华为操心呢?说实话,我估计除了任家人谁也说不上华为是怎么想的,我们也知道产量越大则分摊模糊图片一秒变清晰!2021智能清晰滤镜全新升级网络上图片素材浩如烟海,可是找一张合适又清晰的图片却仿佛大海捞针,不是厚厚的水印就是仿佛上古时期的像素马赛克,高清大图又鲜有免费的午餐,如何是好呢?今天小能手就为大家带来了2021数据库MySQL高性能优化规范建议数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要家里装中央空调好吗?有哪些建议?我用我的观点说下几点第一,太贵了强大的制冷效果和大面积的冷风使得中央空调的价格要比传统空调贵1。52倍之间。经常买东西的人基本都能得出一个理论好东西自然价格高,但其中也不乏物美价廉餐饮行业如何运用小程序拓客引流?谢悟空邀请!首先,这个问题不是很具体,不是很好回答比如你的餐饮具体的定位,是什么样的餐饮,是小吃,是火锅,是炒菜,还是烧烤等因为具体的定位不同,引流的方法肯定也不同。拿火锅为例新开Windows78上的个人OneDrive客户端将于2022年3月1日停止同步来自MicrosoftOneDriveBlog的消息,Windows78上的个人OneDrive客户端将于2022年3月1日停止同步,届时只能使用OneDriveforWeb上传访赋能路径清晰5G工业互联网应用场景扩容11月26日,工业和信息化部信息通信管理局发布5G工业互联网典型应用场景和重点行业实践(第二批),涉及生产单元模拟等10个5G工业互联网的典型应用场景,以及石化化工建材港口纺织家电涉足6家公司宁德时代入股车企有什么讲究?今年11月,宁德时代接连投资阿维塔科技哪吒汽车两家车企,在行业内引起热议。细数宁德时代的投资版图,这家具有投资人思维的动力电池巨头似乎正在建立自己的宁王系。11月15日,宁德时代在旗舰机芯片抢首发?消费者已不吃这套!新旗舰不是越早买越香?马上我们又将迎来一波新旗舰手机的发布,在此之前芯片厂商都会先发布相应最新的旗舰型的芯片产品,新的工艺新的芯片配置必然是更受喜欢,抢首发这个动作不知道是从什么时候开始莫名其妙的成为了工信部培育5G工业互联网解决方案支持专精特新企业发展人民网北京11月28日电(申佳平)据工业和信息化部官方微信公众号工信微报消息,11月26日至27日,工业和信息化部党组书记部长肖亚庆赴河南郑州市调研中小企业工作,并主持召开座谈会。
有什么好用的客服自动回复软件可以推荐?你好可以使用客服快捷回复工具易聊天1一键发送消息解决客服日常工作中,相同问题重复回复,打字又慢又累又低效的问题。2兼容多种平台解决工作中要使用多种聊天工具,但快捷回复不互通的问题。联想,我们不再抱有任何联想导读最近联想成为了一个避不开的热点,各个自媒体平台都在说联想的话题,有为联想洗白的,也有为联想恨铁不成钢的,还有批评联想的。总之,联想成为最近的一个热点。为什么现在的人都不喜欢联想说实话,旗舰机我只推荐这3款,大品牌质量有保障,缺点就是贵如果你想买一款旗舰机,那么我优先推荐下面这3款,个个都是大品牌而且质量有保障,唯一的缺点可能就是价格贵了,如果你的预算充足还在迷茫不知道选择哪款手机,那么不妨聆听下我的建议,根据需华为nova8SE4G版开售波司登发布登峰2。0系列羽绒服科技犬华为此前推出了nova8SE活力版,今日又公布了一款nova8SE4G机型,唯一的8128GB版本定价2099元(12月1日0点正式开售),并且下架了nova8SE5G版本(华米年轻人的第一台GTR华米这块年轻人的第一台GTRAmazfit跃我GTR3,曼曼我已经体验一个月了,接下来就跟大家分享一下这段时间的使用体验。作为一名颜控,我最在意的就是手表的颜值。跃我GTR3和上代12。9英寸iPadPro2021评测一款可以取代笔记本电脑的iPad凭借台式机级别的性能,12。9英寸iPadPro2021比以往任何时候都更接近于取代笔记本电脑,但iPadOS阻止了它,就硬件而言,它是一流的。在高端平板电脑领域,苹果iPad似乎雷军这次玩真的,天玑9000和骁龙8Gen1都要用,米粉终于等到了随着工业设计能力的升级,手机处理器的制造工艺也变得越来越先进,已经达到了4纳米工艺制造的水准,而4纳米工艺制造的处理器代表,分别是联发科的天玑9000芯片和高通骁龙8Gen1芯片,格力实行双休制,告别996格力掌舵人董明珠,正式公开实行每天8小时每周工作五天休息两天的工作制。这对于高科技企业来说,无疑是个令人惊叹的好消息,想想,这的确是少见啊,我们好像已经习惯了996,大小周轮休,在借呗整改后花呗也将启动品牌隔离,用户称自己额度从万元降至千元借呗整改之后,花呗也将启动品牌隔离。11月24日,据财新报道,蚂蚁消费金融公司提供的服务会继续显示花呗品牌,而银行等金融机构独立提供的信贷服务和联合贷服务,都会在信用购页面展示,显5G千万不要说成FiveG5G正以超乎想象的速度走入我们的生活,也越来越被大众所熟知。那么你知道5G的全称是什么吗?你可别告诉我是FiveG,这么说是错误的,下面小研就来给你讲一下正确说法。5G的全称是什么是什么还在支撑着你在用三星手机呢?三星手机现在还是世界老大,只是在中国败走了,在全球,三星出货量还是第一的,用支撑来形容一点都不恰当,而且三星oled屏幕也是世界领先水平我是不得不使用三星手机,因为我工作在国外一个