当前位置: 首页 > news >正文

成交型网站制作成都网站建设专家

成交型网站制作,成都网站建设专家,wordpress图片文件目录,网站建设推广哪家专业上一篇文章中分析了 JS 中的数据类型和变量。这一篇文章将分析作用域#xff0c;以及回答上一篇文章中变量提升的原因。 什么是作用域 作用域是一套规则#xff0c;保存着变量#xff0c;等待被引擎所查找。 var a 1; console.log(a); // 1 console.log(b); // … 上一篇文章中分析了 JS 中的数据类型和变量。这一篇文章将分析作用域以及回答上一篇文章中变量提升的原因。 什么是作用域 作用域是一套规则保存着变量等待被引擎所查找。 var a 1; console.log(a); // 1 console.log(b); // ReferenceError 当打印 a 时引擎就去作用域中查找 a找到把结果返回。如果查找失败那么就会报错。 词法作用域 JS 采用的词法作用域也可以说是静态作用域。简单来说词法作用域是由写代码时将变量写在哪里决定的。 先看一段代码 var a 1;function fn() {var a 2;return a; }fn(); // 2 当执行函数 fn 时会返回 2而不是 1。 作用域查找 JS 引擎会进行两种查找LHS 和 RHS。怎么理解L 和 R 可以说代表左和右。什么的左和右赋值操作的。 这里的赋值操作不一定出现 比如参数传递也是一个赋值操作。 当变量出现在赋值操作的左边时引擎就会对这个变量进行 LHS 查找当出现在右边时这个还可以理解为取得变量的源值就会进行 RHS 查找。 function foo(a) {console.log(a); }foo(2); 对于变量 a 来说引擎会进行两次查找1 次 LHS1 次 RHS。 调用 foo()并传入参数 2这时存在着一个赋值操作即 a 2进行一次 LHS 查找。打印 a 时需要获取 a 的源值所以进行一次 RHS 查找。 如果查询失败呢 对于 LHS 来说给未声明的赋值就会查询失败。 a 2; 但是我们知道上面的代码在非严格模式下并不会报错而变量 a 会被自动创建。 而对于 RHS 来说直接使用未声明的变量就会报 ReferenceError。 console.log(a); // ReferenceError 另外RHS 虽然查询成功但是却对查询结果进行非法操作就会报 TypeError。 var foo 1; foo(); // TypeError 作用域链 前面说作用域是根据名称查找变量的一套规则。而在实际情况中经常出现多个作用域嵌套的情况。 function foo(a) {console.log(a b); } var b 2; foo(2); // 4 当引擎对 b 进行 RHS 查找时在当前作用域无法找到引擎就会在外层作用域中查找直到找到这个变量或者直到抵达最外层作用域全局作用域为止。 LHS 查找也是如此。 把这样一层一层嵌套的作用域叫做作用域链。 函数作用域 函数作用域是指属于这个函数的全部变量都可以在这个函数的范围内使用及复用。 function foo() {var a 1; }console.log(a); // ReferenceError 也就是说函数外部将无法访问函数内部的变量。 但是这却是非常有用的。我们可以利用函数隐藏内部实现使其外部无法访问、修改等。 立即执行函数表达式 利用函数作用域可以将外部作用域无法访问的内容包装起来。但是带来了额外的一个问题函数名本身“污染”了所在的作用域。 这时就提出了 IIFE立即执行函数表达式。 (function foo() {// ... }()); 即包装了内部函数又避免了引入函数名。因为这个函数名无法被外部作用域所访问。 IIFE 的进阶用法是给其传入参数 (function fn(global) {// ... })(window); 这样的好处是可以缩短查询时的作用域链。 块作用域 ES6通过 let 和 const 引入了块作用域。 if (true) {let a 1; } console.log(a); // ReferenceError 变量提升 上一篇文章中中提到了变量提升。 在 JS 中var a 1; 这行代码其实会被看成 var a 和 a 2并在两个阶段去执行。 在编译阶段执行声明操作在执行阶段执行赋值操作。 所有的变量声明都会被提升到作用域的顶部这个过程叫做“提升”。 函数声明也会发生提升并且函数声明会先于变量提升 var foo 1; function foo () {}typeof foo; // number 注意只有函数声明会被提升而函数表达式不会被提升。 var foo 1; var foo function () {}typeof foo; // function 小结 这篇文章梳理了 JavaScript 中作用域的基本知识。 接下来会介绍执行上下文和闭包这两个概念它们与作用域息息相关。 关于 这是我的公众号记录着我的前端博客没事儿也分享一些电影、书籍。 欢迎一起交流学习。
http://www.zqtcl.cn/news/691567/

相关文章:

  • 自主设计和创建网站网站建设价格便宜
  • 高手做网站财经资讯网站该怎么做推广
  • 加强农业网站建设青岛全网营销推广
  • 做淘客网站怎么样济南软件公司排名
  • 企业网站优化兴田德润怎么样网站建设建设公司资质要求
  • 如何把网站做跳转浏览器链接地址wordpress 离线更新
  • 乌海学校网站建设wordpress默认主题下载
  • 海兴县做网站如何选网站建设公司
  • asp网站设为首页代码孝仙洪高速公路建设指挥部网站
  • 浦东新区网站开发人才网站建设策划书
  • 网站做flash好不好免费微信公众号素材网
  • 开发网站嵌入广告汕头电商网站建设
  • 电脑做科目一网站购物网站怎么创建
  • c2c网站建设公司wordpress被公众号干掉
  • wordpress托管建站网站页面布局和样式设计
  • 建站平台江苏省建设监理协会网站
  • 安徽网站开发培训价格百度seo排名公司
  • 青海网站建设费用oa系统和erp系统区别
  • 个人做网站的注意事项网站开发工程师6
  • 镇江百度网站建设北京网站开发价格
  • 大岭山镇仿做网站推广计划表格
  • 网站备案地址不是我的地址怎么办建设银行网站查询业务收费吗
  • 电商网站设计内容网站编辑及seo招聘
  • 用什么网站开发浙江省住房和建设厅网站
  • 站长工具seo优化建议微信小程序线上商城怎么申请
  • 建筑网站开发设计做网站的公司msgg
  • 设计师个人网站模板网站的尾页要怎么做
  • 营销型网站建设风格设定包括哪些方面wordpress企业魔板
  • 怎样做淘客网站做绿色产品的网站
  • 关于网站建设的通知wordpress点注册后一直不出来