展开

关键词

第一节预解释、this原理

----------- 如何区分私有变量和全局变量: 1、预解释的时候,在全局下声明的变量是全局变量 2、在私有中声明的变量(预解释的时候)和函数的形参都是私有的变量 链:在私有中 ,我们代码执行的时候遇到了一个变量,首先我们需要确定它是否为私有的变量,如果是私有的 变量,那么和外面的没有任何关系,如果不是私有的,则往当前的上级进行查找,如果上级也没有则继续查找, 一直找到window为止 当函数执行的时候,首先会形成一个新的私有的,然后按照以下步骤执行: 1、如果有形参,先给形参赋值 2、进行私有中的预解释 3、私有中的代码从上到下执行 .. Ie容易计混,所以会出现泄漏的问题,详见高程3 栈内存 1>全局(浏览器天生开辟的) 当页面关闭的时候全局才会销毁 2>私有(只有函数执行会产生私有) 一般情况下, 函数执行会形成新的私有的,当私有中的代码执行完成后,我们的当前都会主动的进行释放和销毁 但是还是存在特殊情况的:当前私有中的部分内容被以外的东西占了,那么当前就不能销毁了

23720

一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块

简单讲,就是指有权访问另一个函数中的变量的函数。 它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在中的任何局部变量组成。 在函数中访问一个变量时,会从链搜索具有相同的名字的变量,一般地,当函数执行完成后,局部活动对象就会被销毁,内存中保存全局。 一个内部函数会将它的外部函数的活动对象添加到它的链中。 闭包会带着它的函数的,会占更多的内存,多度使闭包会导致内存占过多。 闭包的链包含着自己的,包含函数的和全局,一般,函数的执行后会被销毁,但是,函数返回一个闭包,这个函数的将会一直在内存中保存到闭包不存在为止。 this,在全局函数中,this等价于window,当函数被为某个对象的方法调时,this等价于那个对象。

22200
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

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

    js 函数this 的指向实例 原

    var someuser = { name: 'byvoid', func: function() { console.log(this.name); ; f1(); // 输出 top var f2 = function() { var scope = 'f2'; f1(); }; f2(); // 输出 top 上面解释:静态的含义是函数的嵌套关系由定义时决定而不是调时决定 ,又称为词法,函数f1在查找变量定义时,在语法分析时就已经完成,而不需要等到f1被调的时候才开始 上面的例子如果增加var scope = 'top1';则f2(); // 输出 top1,因为 var name="local"; console.log(name) } console.log(name); 全部输出local因为if没有 但执行ss()时,链是: ss()->t()->window,所以name是”tlwy" var myvar = "my value"; (function() { console.log

    41020

    js中扩充函数(改变this指向)

    函数扩展this对象 es5提供了三个函数非继承的方法,可以直接改变this的指向,但是在书中说是扩充函数,但是我认为改变this指向更贴切一点。 因为如果是扩充函数,就不this来访问,但是我测试的是,必须加上this才能访问到扩充的。 三个方法分别为:apply,call,bing,法都比较简单,也都是改变函数的this指向,下面我就代码来简单说明一下。 } var obj = {name:"Tom"}; GetName.apply(obj,["param1","param2"]); apply方法接受两个参数,第一个参数就是运行函数的 这三个方法功能都是相同,都是改变this指向,只是使形式上有一点不同,大家可灵活运

    33911

    链 通常来说,一段程序代码中所到的名字并不总是有效或可的,而限定这个名字的可性的代码范围就是这个名字的scope。 也可以根据代码层次分层,以便子可以访问父,通常是指沿着链式的链查找,而不能从父中的变量和引 JavaScript为静态static scope,也可以称为词法lexical scope,其主要特征在于,函数中遇到既不是参数也不是函数内部定义的局部变量时,去函数定义时上下文中查 ()是打印的a为1,此为静态,也就是声明时即规定,而假如是动态的话在此处会打印2。 、localContext、Global,总结来说,当需要使函数或者变量时,如果在当前中没有查到值,就会向上级去查,直到查到全局,这样一个查找过程形成的链条就叫做

    19720

    JS

    JS中的就是在一定的空间范围内对数据进行读写操。 在JS中一个变量的(scope)是程序中定义这个变量的区。 变量有全局变量和局部变量两种。 下面就要借助JS的链来更好的理解了。 在此之前,先要明确个概念,即执行环境和是两个完全不同的概念。 函数的每次调都有与之紧密相关的和执行环境。 执行环境始终是this关键字的值,它是拥有当前所执行代码的对象的引。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。 在这个阶段,链会被初始化,this的值也会被最终确定。在执行阶段,代码被解释执行。 搜索过程始终从链的前端开始,然后逐级地向后(全局执行环境)回溯,直到找到标识符为止。 此外还要讲下JS中的块级。 JS中是没有块级这个概念的。 什么是块级呢?

    49630

    四、

    链本应该是一个非常简单的概念。 词法环境,其实就是,有的人叫词法等等 得出结论: 一、在JavaScript中,我们可以将定义为一套规则,这套规则来管理JS引擎如何在当前以及嵌套的子中根据标识符名称进行变量查找 这里的标识符,指的是变量名或者函数名 二、JavaScript中有全局与函数(因为eval我们平时开发中几乎不会到它,这里不讨论)。 链 首先我们要明确的一点是,链是不同的。 是一套规则。 而链则是在代码执行过程中,会动态变化的一条索引路径。 我们知道函数在调激活时,会开始创建对应的执行上下文,在执行上下文生成的过程中,变量对象,链,以及this的值会分别被确定。之前一篇文章我们详细说明了变量对象,而这里,我们将详细说明链。

    28820

    JavaScript

    content {:toc} JavaScript 就是变量与函数的可访问范围。在JavaScript中,变量的有全局和局部两种。 ---- 全局(Global Scope) 在代码中任何地方都能访问到的对象拥有全局,一般来说以下 3 种情形拥有全局。 局部(Local Scope) 和全局相反,局部一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种称为函数 。 如 1. 它们共同组成了一个新的对象,叫“活动对象(activation object)”,该对象包含了函数的所有局部变量、命名参数、参数集合以及this,然后此对象会被推入链的前端。 理解 JavaScript 链 JavaScript 深入浅出-慕课网

    6510

    JS基础——

    [[scope]],函数定义时自动生成的一个隐式属性,是来存储函数链 Scope Chain的容器。链是来存储函数执行上下文 AO和全局执行上下文 GO的容器。 函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的链,并从该链的起始位置开始存储当前环境的链。 函数被定义后&将要执行前会生成函数本身的AO,并将其插入链的起始位置。 ,并将GO插入到链的起始位置。 函数a被执行时,此时函数b也被定义,函数b的[[scope]]也在此时生成,其中存储函数b的链,并将当前环境的链插入函数b链的起始位置,即函数a的AO和GO。

    10810

    函数和块

    函数中的 很对人认为 JavaScript 具有基于函数的,意味着每声明一个函数都会为其自身创建一个气泡,而其他结构不会创建气泡。但事实上并不完全正确! :a, bar, c bar 拥有自己的气泡 同样全局也拥有自己的气泡 a, bar, c 这些标识符都是属于 foo 的气泡,因此无法从 foo 的外部去对它们进行访问。 块 尽管函数是最常见的单元,但是其他类型的单元也是存在的,并且通过使其他类型的单元甚至可以实现维护起来更加优秀、简洁 除 JavaScript 外的很多编程语言都支持块 , 块 with with不仅是一个难以理解的结构,同时也是块的一个例子(块的一种形式), with 从对象中创建出的仅在 with 声明中而非外部有效 with(obj 块在 es6 引入了新的关键字 let 之后成为了一个非常有的机制 let 关键字可以将变量绑定到所在的任意中,为其声明的变量隐式地劫持了所在的块 同样,const 也可以创建块变量

    36720

    全局、函数、块级的理解

    1.前言 是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。很惭愧,我今天才深入理解JS的..我不配做一个程序员.. 没有的时候我们代码也写的好好的,现在新增的概念,我不不行吗? 来,拋一个典型的问题出来,你就明白块级出现的重要性了。 在ES5时代,还没有块级这个概念,但是当时也有一种解决方法,那就是.. .. .. .. .. ("i =",i); //i = 100 ES6中为什么会出现块级的概念,那还要问let和const两兄弟。 const 声明的对象,是可以修改内部属性的,数组同理; 5.总结 主要总结一下块级、以及块级出现的意义,方便更好的记住。

    63610

    1.简介 1.javascript没有块级, 2.只有函数可以创建的。 所以,变量的声明时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。 在函数定义时就已经确定了。 而不是在函数调时确定,而且建议使 var, 主要就是为了隔离变量,不同下同名变量不会有冲突 2. 要通过对应的执行上下文环境来获取变量的值。 同一个下,不同的调会产生不同的执行上下文环境,继而产生不同的变量的值。 所以,中变量的值是在执行过程中产生的确定的,而却是在函数创建时就确定了 ?

    17430

    public 定义为public的class、interface可以被其他任何类访问: package abc; public class Hello { public void hi () { Hello h = new Hello(); // 可以访问protected方法: h.hi(); } } package 最后,包是指一个类允许访问同一个 局部变量 在方法内部定义的变量称为局部变量,局部变量从变量声明处开始到对应的块结束。方法参数也是局部变量。 ,即①~⑩; 变量s的是定义处到方法结束,即②~⑩; 变量len的是定义处到方法结束,即③~⑩; 变量p的是定义处到if块结束,即⑤~⑨; 变量i的是for循环,即⑥~⑧。 使局部变量时,应该尽可能把局部变量的缩小,尽可能延后声明局部变量。 final Java还提供了一个final修饰符。final与访问权限不冲突,它有很多

    13620

    1.1 概述 通常来说,一段程序代码中所到的名字(变量名)并不总是有效和可的,而限定这个名字的可性的代码范围就是这个名字的的使提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。 JavaScript(es6前)中的有两种: 全局 局部(函数) 1.2 全局 于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件 1.3 局部 于函数内的代码环境,就是局部。 因为跟函数有关系,所以也称为函数。 1.4 JS没有块级由 { } 包括。 ,写在函数内部的局部,未写在任何函数内部即在全局中; 如果函数中还有函数,那么在这个中就又可以诞生一个; 根据在[内部函数可以访问外部函数变量]的这种机制,链式查找决定哪些数据能被内部函数访问

    17320

    ,将其命名为a,然后将值 2 保存进这个变量 1、遇到var a,编译器会询问是否已存在该名称的变量并存在同一个集合中。 如果是,编译器会忽略该声明,继续编译;否则会要求在当前的集合中声明一个新的变量并命名为a 2、编译器会为引擎生成运行时需要的代码,处理a = 2这个赋值操。 引擎运行时会问该,在当前的集合中是否存在一个叫a的变量,如果是,引擎就会使这个变量,如果否,引擎继续查找该变量 function foo() { var a = 1; var a 哪里了 RHS 查询 function foo(a) { console.log(a); } foo(2); 嵌套 是根据名称查找变量的一套规则,实际情况中,通常需要同时顾及几个 当在当前没有找到某个变量时,引擎就会在外层嵌套的中继续查找,直到找到,或抵达最外层的(全局) function foo(a) { console.log(a + b); }

    14010

    标识符的有函数原型、局部(块)、类和 命名空间(namespace) 函数原型 函数原型 函数原型 是C++ 程序中最小的——函数原型的声明中一定要包含形参的名称和类型说明 ,也就是说大括号范围之内,在程序的任何其他地方都不能引这个标识符——所以它们的被称为函数原型 局部(块) 局部这里的 局部 主要指的是同一个函数体内(可以是主函数也可以是其他自定义的函数 //b的结束 }//a的结束 已经知道,函数形参的,从形参列表开始,到函数体结束之处结束。 类类可以被看做是一组有名字的成员的集合——具体地说,某一个类Class的成员member具有类——对于member的访问,有以下几种方式: 如果在class的任意一个成员函数中,没有声明同名的局部标识符 ,凡是在该命名空间内声明的,不属于前面提到的各个的标识符,都属于这个命名空间的

    6720

    6520

    了解 JS

    (1) 一个变量的(scope)是程序源代码中定义的这个变量的区。 1. 在JS中使的是词法(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称全局变量(global scope) 在函数内声明的变量具有函数(function 引入一大段话来解释: 每一段js代码(全局代码或函数)都有一个与之关联的链(scope chain)。 这个链是一个对象列表或者链表,这组对象定义了这段代码中“中”的变量。 链举例: 在js最顶层代码中(也就是不包括任何函数定义内的代码),链由一个全局对象组成。 链创建规则: 当定义一个函数时(注意,是定义的时候就开始了),它实际上保存一个链。

    28110

    JavaScript中的

    (Scope) 1. 是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,决定了代码区块中变量和其他资源的可见性。 我们可以这样理解:就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说最大的处就是隔离变量,不同下同名变量不会有冲突。 ES6 之前 JavaScript 没有块级,只有全局和函数。ES6 的到来,为我们提供了‘块级’,可通过新增命令 let 和 const 来体现。 2. 这是函数的一个体现。 3.函数 函数,是指声明在函数内部的变量,和全局相反,局部一般只在固定的代码片段内可访问到,最常见的例如函数内部。 ,内层可以访问外层的变量,反之则不行。

    43710

    相关产品

    • 私域安全

      私域安全

      私域安全(PDS)为客户提供私域运营全生命周期的一站式安全解决方案,主要包括私域场景保护、会员运营安全、社群保护等子产品,目前已广泛应用于零售、金融、互联网、政务等多个行业。私域安全产品基于传感行为AI混合专家模型,再通过小程序特有功能接口和数据分析,帮助客户在全链路运营中识别风险用户,提供会员检查判断,进而整体提升私域运营的效率,助力会员运营提效。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券