首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

初识js_Js变量理解

今天看了关于js方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易。   ...当然之所以难理解,个人觉得是基础知识掌握的不牢,因为牵扯到一些前面的东西,比如作用域\等等,如果连基本的作用域都没有弄清楚,自然不可能搞懂,还有就是对js的实践比较少,因为你根本就不知道什么时候要用这东西...今天我就简单的说说我目前所理解的,当然可能不完全正确,但是我相信会给你一定的启发。   首先我们来谈谈js的变量,如果你不知道我为什么要说这些,那么你根本没有掌握js的基础,建议回头复习。...如果某个函数被它的父函数之外的一个变量引用,就形成了一个 还有一种更为常用的写法 var bi = (function(){ var a = 0; function b(){ a ++; console.log...所以我们多次打印bi()就成了1、2、3 下面我来说一个的使用场景吧。

3.3K20

js

js一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是呢?它又有什么用呢?...就是用来解决这一需求的,的本质就是一个函数内部创建另一个函数。...我们首先知道有3个特性: ①函数嵌套函数 ②函数内部可以引用函数外部的参数和变量 ③参数和变量不会被垃圾回收机制回收 本文我们以两种的主要形式来学习 在这段代码,a()的返回值是一个匿名函数...,这个函数a()作用域内部,所以它可以获取a()作用域下变量name的值,将这个值作为返回值赋给全局作用域下的变量b,实现了全局变量下获取到局部变量的变量的值 再来看一个的经典例子 一般情况下...-定时器与 一个for循环,让它按顺序打印出当前循环次数 按照预期它应该依次输出1 2 3 4 5,而结果它输出了五次5,这是为什么呢?

3.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS

    : 函数内部嵌套一个函数,内部函数引用外部函数的数据,内部函数称之为 示例代码 function fn1(){ var a = 10...return {fn2,fn3} } let {fn2,fn3} = fn1() fn2() // 11 fn3() // 10 在上面的代码示例...存在两个函数 fn2,fn3 的生命周期: 产生: 当嵌套的内部函数定义完毕之后 执行完之后 就产生 死亡: 当嵌套的内部函数不被外界需要的时候,就被垃圾回收 包产生的条件是: 函数嵌套一个函数...内部函数引用外部函数的数据(变量 / 函数) 执行外部函数 的作用: 延长局部变量的生命周期哦 让函数外部操作函数内部的数据( 变量 / 函数) 的缺点: 容易造成内存泄漏(内存不能被释放,就会咋成...ncxl) 手动释放null // 手动释放 fn2 = null; fn3 = null; 哈哈哈哈 嘿嘿嘿嘿 //想要获取到标签的内容

    9310

    JS

    JS用法给开发带来了极大的便利,它的使用方式非常自然,以至于很多同学并不很了解,却可以实际开发顺畅的使用了 例如下面的代码,给button添加一个点击事件,很多人经常这么,实际上这就是一个...要了解,需要先了解下JS变量的作用域 变量的作用域无非就是两种:全局变量和局部变量 特点是 函数内部可以访问外部变量,函数外部不能访问函数内的变量 例如 ?...那就是函数的内部,再定义一个子函数,这个子函数可以访问外部的变量,然后父函数把这个子函数return,让外部可以通过子函数访问自己的局部变量 例如 ?...这个实现方式就是 什么是 其实就是将函数内部和函数外部连接起来的一座桥梁,可以让函数外部的代码访问函数内容变量,可以把简单理解成“定义一个函数内部的函数” 包在子作用域中保存了一份父级作用域取得的变量...原因 第一种方式出现错误,是因为for循环结束后,变量item的值已经变为了最后一项,所以当点击事件执行时,读取的信息总是最后一项的信息 而第二个方式就是利用了会把父级变量保存到自己作用域的特点

    4.2K40

    JS

    定义 一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。...就是一个作用域中保存了一份它从上一级函数或者作用域得到的变量,而这些变量是不会随上一级函数的执行完成而销毁。 前提条件 计算机的内存变量如果有被引用着的话,则系统是不会将之回收的。...只要我们能够一直持有这个引用,则就可以令局部变量避免被回收——这是概念成立的前提 用途 可以读取到函数内部的变量 可以让函数内部变量保持在内存 避免全局变量的污染 私有成员的存在...注意事项 会让函数的变量都被保存到内存,内存消耗较大,不能滥用,否则会导致性能和内存泄漏问题(退出函数之前可以将不用的局部变量全部删除) 能改变父函内部变量的值,一定要小心使用 示例

    2.5K110

    js

    目录 的概念 的用途 代码实例 注意点 两个代码片段的对比 的概念 简单来说,就是定义一个函数内部的函数 的用途 可以读取函数内部的变量 让这些变量的值始终保持在内存...n一直保存在内存,并没有f1调用后被自动清除。...nAdd前面没有使用var关键字,因此 nAdd 是一个全局变量,而不是局部变量。 nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个。...注意点及解决方法 由于会使得函数的变量都被保存在内存,内存消耗很大,所以不能滥用,否则会造成网页的性能问题,IE可能导致内存泄露。...解决方法:退出函数之前,将不使用的局部变量全部删除。 会在父函数外部,改变父函数内部变量的值。 解决方法:不要随便改变父函数内部变量的值。

    2.3K30

    JS

    JS 概念 能够读取其他函数内部变量的函数 定义一个函数内部的函数,内部函数持有外部函数内变量的引用 简单来说,是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数的内层函数,但并不仅仅是一个函数...js函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。...function f1(){ var n = 123; function f2(){ //f2是一个 alert(n) } return...f2可以读取f1的变量,只要把f2作为返回值,就可以f1外读取f1内部变量 用途 读取函数内部的变量 让这些变量的值始终保持在内存。不会再f1调用后被自动清除 方便调用上下文的局部变量。...利于代码封装 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存,f2的存在依赖f1,因此f1也始终存在内存,不会在调用结束后,被垃圾回收机制回收

    2.5K50

    JS

    在理解以前.最好能先理解一下作用域链的含义,简单来说,作用域链就是函数定义的时候创建的,用于寻找使用到的变量的值的一 个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数的变量放在其次...,把再高一级函数的变量放在更后 面,以此类推直至全局对象为止.当函数需要查询一个变量的值的时候,js解释器会去作用域链去查找,从最前面的本地变量先找,如果 没有找到对应的变量,则到下一级的链上找...了解了作用域链,我们再来看看js的内存回收机制,一般来说,一个函数执行开始的时候,会给其中定义的变量划分内存空间保存,以备后面的语句所用,等到函数执行完毕返回了,这些变量就被认为是无用的了.对应的内存空间也就被回收了....如果在外部函数返回后,又直接调用了内部函数,那么内部函数就无法读取到他所需要的外部函数变量的值了.所以js解释器遇到函数定义的时候,会自动把函数和他可能使用的变量(包括本地变量和父级和祖先级函数的变量...(自由变量))一起保存起来.也就是构建一个,这些变量将不会被内存回收器所回收,只有当内部的函数不可能被调用以后(例如被删除了,或者没有了指针),才会销毁这个,而没有任何一个引用的变量才会被下一次内存回收启动时所回收

    2.5K50

    JS 与模块

    Redux是另一个“好”全局变量的例子:整个应用程序的状态存储一个JS对象,这个对象可以从整个应用程序(通过Redux)访问。...; } 咱们同事一个文件创建一个名为arr的新全局数组的几率有多大?我觉得非常高。JS的全局变量非常糟糕的另一个原因是引擎足够友好,可以为咱们创建全局变量。...JS的真正目的是什么的需要 除了纯粹的“学术”知识之外,JS还有很多用处: 提供私有的全局变量 函数调用之间保存变量(状态) JS最有趣的应用程序之一是模块模式。...ES6之前,除了将变量和方法封装在函数之外,没有其他方法可以模块化JS代码并提供私有变量与方法”。与立即调用的函数表达式相结合 是至今通用解决方案。...JS 是一种能够“记住”其变量环境的函数,即使在后续函数调用之间也是如此。当咱们从另一个函数返回一个函数时,会创建一个,这个模式也称为“工厂函数”。 思考 什么是

    1.1K10

    彻底理解js

    js一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是呢?它又有什么用呢?...就是用来解决这一需求的,的本质就是一个函数内部创建另一个函数。...我们首先知道有3个特性: ①函数嵌套函数 ②函数内部可以引用函数外部的参数和变量 ③参数和变量不会被垃圾回收机制回收 本文我们以两种的主要形式来学习 ①函数作为返回值 在这段代码,a()的返回值是一个匿名函数...,这个函数a()作用域内部,所以它可以获取a()作用域下变量name的值,将这个值作为返回值赋给全局作用域下的变量b,实现了全局变量下获取到局部变量的变量的值 再来看一个的经典例子 一般情况下...-定时器与 一个for循环,让它按顺序打印出当前循环次数 按照预期它应该依次输出1 2 3 4 5,而结果它输出了五次5,这是为什么呢?

    72610

    js面试题经典_js原理

    我相信如果你不是非常理解JavaScript,一定是不想看这段代码的。...var a=fun(0),传入一个参数0,那就是说,函数fun参数 n 的值是0了,而返回的那个对象,需要一个参数n,而这个对象的作用域中没有n,它就继续沿着作用域向上一级的作用域中寻找n,最后函数...undefined 0 1 1 最开始的代码来自这里 http://www.cnblogs.com/xxcanghai/p/4991870.html 这篇文章只是针对这道题讲了讲,没有非常着重的去讲这个概念...,所以如果朋友们,对详细的概念还不是很理解,要赶紧学习了。...顺便推荐几篇讲解的文章 学习Javascript(Closure) Javascript——懂不懂由你,反正我是懂了 JS可被利用的常见场景 发布者:全栈程序员栈长,转载请注明出处

    2.9K20

    再谈JS

    简明扼要 作用域(scope)控制着变量的可见性和生命周期 JS,生成作用域 1. 函数 2....块级作用域 不同的作用域能够拥有同名的变量 外部作用域的变量可以在内部作用域中访问 JS通过「词法作用域」(静态作用域)来实现变量查询机制 「(closure)是一个函数」:其有权访问其词法作用域内部的变量即使该函数词法作用域外部被调用...只有了解了这些概念,我们才会对的认识有的放矢。 1. 作用域 当你定义一个变量,你想要该变量某些范围内是「可访问的」。...❝JS,作用域由 1. 函数 2....一图胜千言 我们可以得出如下结论 ❝「(closure)是一个函数」:其有权访问其词法作用域内部的变量即使该函数词法作用域外部被调用 ❞ 更简单的讲:一个函数,它会从定义它的地方记住变量,

    2.8K30

    JS总结

    的用途 1.防止全局变量污染 JavaScript全局变量是个不小的毒瘤,全局变量有时是很方便,但是很多项目滥用全局变量成灾,维护起来非常困难。...2.局部变量访问 上面防止全局变量污染的例子i是一个局部变量,但是函数外依然可以间接的访问控制,就是达到了作用域外访问局部变量。...6.循环中保存索引 开发过程循环里注册回调很常见,但是刚接触js的同学常常会遇到注册完了回调,发现索引值不对,可以看下面的例子: ?...7.的其他问题 因为的局部变量不会释放,所以和全局变量一样会占用大量内存。 变量引用由于不会释放,很有可能造成内存泄露。 大量的使用可能会降低程序的可读性,增加维护成本。...总之有很多地方用起来很方便,的特性也能帮助我们实现很多巧妙的设计,但是也会引起很多问题,所以开发过程应该尽量少用

    2.3K41

    JS (1)

    前言 JavaScript 一个非常强大的概念,很多开发者在学习 JavaScript 时都会遇到这个问题。...具体来说,当一个内部函数引用了其外部函数的变量时,就形成了一个。...的优点 的最大优点是它们可以帮助我们隐藏或封装数据。这使得我们可以编写很多高效和安全的代码。其中一个优点是,可以“记住”其父级函数的数据,即使该函数已经退出并且不再存在。...下面是一个稍微复杂的例子,它演示了 JavaScript 中使用的一些缺点: function createBigObject() { const bigObject = new Array(...由于 JavaScript 不会回收未使用的变量,因此可能会导致内存泄漏和性能问题。 结论 本文中,我们介绍了 JavaScript 概念,并提供了几个示例来更好地理解它们。

    5910

    js特性

    学习了一下js,主要的特点就是函数内部可以访问上一级作用域的变量。 ​ 那这个特点可以做什么呢,比如我们需要维护一个变量,但是又不想把这个变量提权到更高一级,以免污染了全局。...这个时候我们可以一个函数,内部定义变量,然后定义维护变量的方法。这样我们可以随时修改这个变量,同时也不需要在全局定义变量,把变量的作用域限制了方法内部。 ​...有这样一个案例,我们需要在鼠标按下某个按钮的时候开启一个定时器,然后鼠标抬起的时候又关闭这个定时器。...this.stop=function(){ clearInterval(t) } } let timer=Timer() timer.start() timer.stop() ​ 如果不是...,我需要在全局引用一个定时器的引用,这样会污染全局,因为定时器的引用对于全局是没有用的。

    2.5K20
    领券