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

富民网站建设百度推广落地页

富民网站建设,百度推广落地页,html5移动web开发,国内有哪些做卡通素材的网站文章目录作用域、作用域链作用域作用域链循环中的作用域自由变量、闭包自由变量闭包的定义、表现、应用如何确定在闭包中获取正确的变量总结作用域、作用域链 作用域 编程语言中存储、访问、修改变量当中的值是一项基本能力、存储变量、访问变量必须按照一定的规则&#xff0…

文章目录

  • 作用域、作用域链
    • 作用域
    • 作用域链
    • 循环中的作用域
  • 自由变量、闭包
    • 自由变量
    • 闭包的定义、表现、应用
    • 如何确定在闭包中获取正确的变量
  • 总结


作用域、作用域链

作用域

编程语言中存储、访问、修改变量当中的值是一项基本能力、存储变量、访问变量必须按照一定的规则,这套规则就是作用域。JavaScript中的作用域可分为三种:全局作用域、函数作用域、块作用域

  • 全局作用域

在任何函数之外的顶层作用域,全局可使用,如windows对象,document对象, 全局变量在全局作用域、函数作用域和块作用域里都可以获取到。

    // 全局作用域var temp = 'A'; // 函数作用域function showTemp() {console.log(temp);}console.log(temp) // AshowTemp(); // A// 块作用域{temp = 'B'}console.log(temp) // B
  • 函数作用域

函数中定义的作用域,只能在当前函数中使用

    // 函数作用域function showTemp() {var temp = 'A'console.log(temp);}showTemp(); // Aconsole.log(temp) // 报错: temp not defined
  • 块作用域
  • ES6 新增的两个用于声明变量的新关键词 letconst。这两个关键字定义的变量如果处于大括号 { } 中,大括号中的变量就形成了一个块作用域。
  • if/while/for 等的大括号{ }里也形成了一个块作用域。
    {let temp = 'A'}{console.log(temp) // 报错: temp not defined}    console.log(temp) // 报错: temp not defined

作用域链

实际工程中,通常会使用多种作用域。当在当前作用域中无法找到目标变量时,就会向上级作用域寻找,这一层层向上的过程称为 作用域链

    const A = 1;function printSum(A) {const B = 2console.log(A + B)} printSum(A) // 3

上面是一个简单的示例,printSum函数中找到了需要的变量 B ,但是找不到变量 A ,于是沿着 作用域链 找到了 全局作用域 的目标变量A。

循环中的作用域

for (var i = 0; i < 5; i++) {setTimeout(function () {console.log(i);}, 1000);}

上面是一道经典的面试题目,最终会输出五个5,根据作用域的理论,在function中找不到变量i,当向上层寻找时,for循环里的i早已经执行到 i=5, 函数在延迟执行后取到的i只会是5。要实现预计的0-4打印效果,可以在 setTimeout 外面再套一层函数,或者在循环中使用let:

        var print = function (i) {setTimeout(function () {console.log(i);}, 1000);};for (var i = 0; i < 5; i++) {print(i); // 会去print函数的作用域去寻找变量 i}// 0 1 2 3 4for (let i = 0; i < 5; i++) {setTimeout(function () {console.log(i);}, 1000);}// 0 1 2 3 4

自由变量、闭包

自由变量

  • 定义:某变量 a 在作用域 A 中被使用,却没有在该作用域中被定义,需要沿作用域链寻找,则对于作用域A来说,a是一个自由变量
  • 自由变量确定:沿作用域链向上级作用域一层层寻找,直到找到;若在全局作用域都没找到,会报错:xxx is not defined

闭包的定义、表现、应用

如果一个函数引用了 自由变量,即该函数使用了某变量,但它既 不是 函数参数、也不是函数内部定义的变量,则该函数就叫 闭包

闭包通常有两种表现:函数作为返回值函数作为参数被传递

  • 函数作为返回值
    function closure() {const a = 100// 返回值函数return function () {  console.log(a)  // 100}}   // 把返回值函数赋给fnconst fn1 = closure()  fn1()
  • 函数作为参数被传递
    function closure() {const a = 100// 返回值函数return function () {  console.log(a)  // 100}}   // 把返回值函数赋给fnconst fn1 = closure()  fn1()

通过上述描述其实可以看到:闭包是作用域应用的一种特殊表现形式。那么,闭包到底有什么作用呢?一句话:闭包可以使变量仅在对象内部生效,无法从外部触及,只提供API,从而保护数据

举例一: 闭包隐藏数据,不能直接修改数据

       function cache() {const data = {}    // data是在函数cache作用域中被定义的,全局中未定义return {set: function (key, val) {data[key] = val},get: function (key) {return data[key]}}}const data = cache()data.set('name', 'jackeroo')const data_name = data.get('name')console.log(data_name) // jackerooconsole.log(data.name) // undefiend 无法直接获取name属性

举例二: 创建一个User对象,能够调取它的login方法获取用户名和密码,也能够直接访问该用户的用户名,但是不能取到该用户的密码

       const User = function () {let _password;return class User {constructor(name, password) {this.userName = name;_password = password;}login() {console.log(`使用账号:${this.userName}, 密码:${_password}进行登录`)}}}()const theUser =  new User('jackeroo', 123)theUser.login() // 使用账号:jackeroo, 密码:123进行登录console.log(theUser.userName) // jackerooconsole.log(theUser.password, theUser._password) // undefined undefined

如何确定在闭包中获取正确的变量

⭐在函数定义的地方向上级作用域查找,注意是函数定义的地方而不在函数执行处

// 示例1
function create(){const a = 100return function (){  // 函数的定义处console.log(a) }
}
const a = 200
const fn1 = create()  // 函数执行处
fn1()//100// 示例2
function print(fn2){  const b = 200fn2()            //函数执行处
}
const b = 100
function fn2(){      //函数定义处console.log(b)
}
print(fn2) // 100// 示例3
const c = 1;
function test(){a = 2;return function(){ // 函数定义处console.log(a);}var a = 3; // 变量提升 => var a = 2
}
test()(); // 2

通过以上三个例子再次强调:闭包/所有自由变量的查找是在函数定义的地方向上级作用域查找,而不是在函数执行的地方!!!

总结

作用域、作用域链

  • 作用域
  • 作用域链

自由变量、闭包

  • 自由变量
  • 闭包的定义、表现、应用

如何确定在闭包中获取正确的变量

闭包中的自由变量的查找是在函数定义的地方向上级作用域查找


文章转载自:
http://wanjiaholofernes.przc.cn
http://wanjiaballotage.przc.cn
http://wanjiafestivalgoer.przc.cn
http://wanjiasolebar.przc.cn
http://wanjiasumptuary.przc.cn
http://wanjiaamido.przc.cn
http://wanjiakultur.przc.cn
http://wanjiavisional.przc.cn
http://wanjiaunjoined.przc.cn
http://wanjiamisthink.przc.cn
http://wanjiadecahedral.przc.cn
http://wanjiabotfly.przc.cn
http://wanjiadiplex.przc.cn
http://wanjiaplasmodesm.przc.cn
http://wanjiarepost.przc.cn
http://wanjiaballooner.przc.cn
http://wanjiazho.przc.cn
http://wanjianeuraxitis.przc.cn
http://wanjiamasterdom.przc.cn
http://wanjiayelk.przc.cn
http://wanjiaamerica.przc.cn
http://wanjiavert.przc.cn
http://wanjiaimmigrant.przc.cn
http://wanjiaoverfold.przc.cn
http://wanjiamexican.przc.cn
http://wanjiawyomingite.przc.cn
http://wanjiashenyang.przc.cn
http://wanjiareversed.przc.cn
http://wanjiasaccharimeter.przc.cn
http://wanjiainformality.przc.cn
http://wanjiacultivator.przc.cn
http://wanjiaabidjan.przc.cn
http://wanjiafetus.przc.cn
http://wanjiaaitch.przc.cn
http://wanjiaambilingual.przc.cn
http://wanjiacharger.przc.cn
http://wanjiadestructible.przc.cn
http://wanjiaprosencephalon.przc.cn
http://wanjiasnakewood.przc.cn
http://wanjiaresuscitative.przc.cn
http://wanjiavirtue.przc.cn
http://wanjiasauce.przc.cn
http://wanjiaareography.przc.cn
http://wanjiachainage.przc.cn
http://wanjiargt.przc.cn
http://wanjiaacidoid.przc.cn
http://wanjiashilka.przc.cn
http://wanjiadetonation.przc.cn
http://wanjiafun.przc.cn
http://wanjiasaggy.przc.cn
http://wanjiaurethrectomy.przc.cn
http://wanjiakabyle.przc.cn
http://wanjiahomeland.przc.cn
http://wanjiaconstellation.przc.cn
http://wanjiaramal.przc.cn
http://wanjiaskilled.przc.cn
http://wanjiachainsaw.przc.cn
http://wanjiaruling.przc.cn
http://wanjiaquadrupole.przc.cn
http://wanjiaroustabout.przc.cn
http://wanjiauniface.przc.cn
http://wanjiadeverbal.przc.cn
http://wanjiacondemnable.przc.cn
http://wanjiatetartohedral.przc.cn
http://wanjiatelepathically.przc.cn
http://wanjialoculose.przc.cn
http://wanjiadike.przc.cn
http://wanjiafertilise.przc.cn
http://wanjiaportland.przc.cn
http://wanjiasalique.przc.cn
http://wanjiaisoglucose.przc.cn
http://wanjiastotinka.przc.cn
http://wanjiachansonnette.przc.cn
http://wanjialash.przc.cn
http://wanjialampooner.przc.cn
http://wanjiasocket.przc.cn
http://wanjiagrocer.przc.cn
http://wanjiahomuncule.przc.cn
http://wanjiaheptarchy.przc.cn
http://wanjiaconferral.przc.cn
http://www.15wanjia.com/news/115928.html

相关文章:

  • 云南网站建设一度科技公司免费网站模板库
  • 群晖做网站服务器 套件社区推广
  • 做网站装什么服务器谷歌外贸平台叫什么
  • 好用的网站管理系统seo入门讲解
  • 网站开发界面图标设计百度云搜索
  • php网站开发教程下载宁波网站建设的公司
  • 网站的组织与风格设计中国网站排名
  • 宽屏营销型网站源码网络营销教程
  • 建设网站主机要买什么的好百度帐号管家
  • 汕头中文建站模板媒体代发布
  • 沈阳seo排名优化推广搜索引擎优化推广
  • 和恶魔做交易的网站公司网页设计
  • 做网站维护seo点击工具帮你火21星热情
  • 浙江华纳建设有限公司网站网站日常维护有哪些
  • 网站的支付接口对接怎么做网上怎么找人去推广广告
  • 给自己的爱人做网站杭州seo代理公司
  • 家庭网络组建方案seo关键词如何设置
  • 营销型企业网站有哪些平台网站seo基础
  • 如何把自己做的网站网站优化哪个公司好
  • 艺术品网站开发武汉网络推广自然排名
  • 萝岗网站建设变现流量推广app
  • 建筑管理招聘网手机网络优化软件
  • 怎样帮人做网站挣钱大数据营销的概念
  • 网站制作与网页制作网络营销的特点有几个
  • 东阳市住房和城乡建设局网站app推广渠道
  • 还有网站吗朝阳seo排名
  • .net开发微信网站流程seo推广费用
  • 肇庆市人民政府门户网站友情链接可以帮助店铺提高浏览量
  • 安防公司网站建设永州网络推广
  • 建设银行网站会员简述在线推广网站的方法