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

理解jsthis

为什么使用this 如果没有this,那么我们代码会是下面的写法: 在方法中,为了能够获取到name名称,必须通过obj引用(变量名称)来获取。...但是这样做有一个很大弊端:如果我将obj名称换成了info,那么所有的方法中obj都需要换成info。...(编写位置)没有关系; 3.this绑定和调用方式以及调用位置有关系; 4.this是在运行时被绑定; this绑定规则 默认绑定 在独立函数调用情况下使用默认绑定 独立函数调用我们可以理解成函数没有被绑定到某个对象上进行调用...: 也就是它调用位置中,是通过某个对象发起函数调用。...这个和setTimeout源码内部调用有关; setTimeout内部是通过apply进行绑定this对象,并且绑定是全局对象; 案例二:数组forEach 数组有一个高阶函数forEach,用于函数遍历

3K30

jsDOM理解

try…catch try{}catch(e) {}finally{} Error.name六种值对应信息: 1. EvalError:eval()使用与定义不一致 2....URIError:URI处理函数使用不当 复制代码 es5严格模式 “use strict” 不再兼容es3一些不规则语法。使用全新es5规范。...DOM对象即为宿主对象, 由浏览器厂商定义,用来操作html和xml功能一类对象集合。 也有人称DOM是对HTML以及XML标准编程接口。...ie7以下版本中没有,非实时 .querySelectorAll() // css选择器 在ie7和ie7以下版本中没有,非实时 复制代码 DOM基本操作 遍历节点树: parentNode ->...->后一个兄弟节点 previousSibling->前一个兄弟节点 基于元素节点树遍历 parentElement -> 返回当前元素父元素节点 (IE不兼容) (以下IE不兼容指的是 9 以下)

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

    理解js变量提升

    深刻理解变量提升 当执行 JS 代码时,会生成执行环境,只要代码不是写在函数中,就是在全局执行环境中,函数中代码会产生函数执行环境,只此两种执行环境。...{ console.log('call b') } 想必以上输出大家肯定都已经明白了,这是因为函数和变量提升原因。...通常提升解释是说将声明代码移动到了顶部,这其实没有什么错误,便于大家理解。但是更准确解释应该是:在生成执行环境时,会有两个阶段。...第一个阶段是创建阶段,JS 解释器会找出需要提升变量和函数,并且给他们提前在内存中开辟好空间,函数的话会将整个函数存入内存中,变量只声明并且赋值为 undefined,所以在第二个阶段,也就是代码执行阶段...let 不能在声明前使用,但是这并不是常说 let 不会提升,let 提升了,在第一阶段内存也已经为他开辟好了空间,但是因为这个声明特性导致了并不能在声明前使用。

    5.5K20

    js构造函数理解

    作为原型和原型链基础,先了解清楚构造函数以及它执行过程才能更好地帮助我们学习原型和原型链知识。 1、什么是构造函数 2、为什么要使用构造函数?...; // 创建一个新内存 #f3 每当创建一个实例时候,就会创建一个新内存空间(#f2, #f3),创建 #f2 时候,函数体内部 this 指向 #f2, 创建 #f3 时候,函数体内部...(4) 默认返回 this 由于函数体内部this指向新创建内存空间,默认返回 this ,就相当于默认返回了该内存空间,也就是上图中 #f1。此时,#f1内存空间被变量p1所接受。...也就是说 p1 这个变量,保存内存地址就是 #f1,同时被标记为 Person 实例。 以上就是构造函数整个执行过程。 4、构造函数返回值 构造函数执行过程最后一步是默认返回 this 。...首先,当用 new 关键字调用时,产生一个新内存空间 #f11,并标记为 Person1 实例;接着,函数体内部 this 指向该内存空间 #f11;执行函数体内部代码;由于函数体内部this

    2.2K31

    理解jsnew

    new 操作符 在有上面的基础概念介绍之后,在加上new操作符,我们就能完成传统面向对象class + new方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassical...基于上面的例子,我们执行如下代码 var obj = new Base(); 这样代码结果是什么,我们在Javascript引擎中看到对象模型是: ? new操作符具体干了什么呢?...成员对象 第三行,我们将Base函数对象this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量值是”base”,关于call函数用法,请参看陈皓...__特性,toString这个方法也可以做新对象方法被访问到。...于是我们看到了: 构造子中,我们来设置‘类’成员变量(例如:例子中id),构造子对象prototype中我们来设置‘类’公共方法。

    3.4K40

    js---BOM 理解方法

    , "Default"); //提示用户输入信息,接受两个参数,即要显示给用户文本和文本框中默认值,将文本框中值作为函数值返回 window.status //可以使状态栏文本暂时改变 window.defaultStatus...//默认状态栏信息,可在用户离开当前页面前一直改变文本 window.setTimeout("alert('xxx')", 1000); //设置在指定毫秒数后执行指定代码,接受2个参数,要执行代码和等待毫秒数...window.clearTimeout("ID"); //取消还未执行暂停,将暂停ID传递给它 window.setInterval(function, 1000); //无限次地每隔指定时间段重复一次指定代码...pictures/index.htm location.portocol //URL中使用协议,即双斜杠之前部分,如http location.host //服务器名字,如www.wrox.com...//URL中主机名后部分,如/pictures/index.htm location.search //执行GET请求URL中问号后部分,又称查询字符串,如?

    1.4K30

    理解JS“异常传播”

    今天看了廖雪峰老师一篇文章关于处理异常,写很不错,总结一下!...我们都知道JS里面的函数是非常重要一部分,也是学习JS精髓所在,那函数分为很多种,看你怎么分,可以分为有参函数和无参函数,按照返回值分为有返回值函数和没有返回值函数,那么在写函数时候我们经常遇到一个问题就是异常处理...,之前在写Java时候其实也是一样会遇到这样问题,那么在java里面其实只要你觉得哪里可能会出问题时候,你只需要将代码try-catch捕捉一下将异常处理就行了,在js里面呢其实也是一样,例如下面的例子...length' of null 这句话也就是我们处理异常时候写,也是最常见一种,这个函数叫做有参函数, 那么我们捕捉是参数会不会有问题,如果有问题我们就将异常捕捉出来,这是很常规一种写法,今天我们要说是异常传播是什么意思呢...其实我们在写js函数时候很多时候不会是一个函数,会有很多函数接连调用,那么任何一个函数出问题其实都是应该捕捉,理论上是这样是吧,但是这样写代码的话就很麻烦了,所以就出现了下面这样代码:

    72710

    深入理解Jsthis

    深入理解Jsthis JavaScript作用域为静态作用域static scope,但是在Jsthis却是一个例外,this指向问题就类似于动态作用域,其并不关心函数和作用域是如何声明以及在何处声明...作用域 我们先来了解一下JavaScript作用域,以便理解为什么说this更类似于动态作用域,通常来说,一段程序代码中所用到名字并不总是有效或可用,而限定这个名字可用性代码范围就是这个名字作用域...JavaScript在栈内存中提供一个供Js代码执行环境,关于作用域以及函数调用都是栈内存中执行。...Js中基本数据类型String、Number、Boolean、Null、Undefined、Symbol,占用空间小且大小固定,值直接保存在栈内存中,是按值访问,对于Object引用类型,其指针放置于栈内存中...这个函数也是存在于堆内存中,实际上在此处我们可以将其理解为这个函数实际定义在一个内存区域(以一个匿名函数形式存在),而obj这个对象同样在其他一个内存区域,obj通过say这个属性指向了这个匿名函数内存地址

    42810

    js事件委托理解

    事件委托也叫事件代理,事件委托就是利用事件冒泡,指定一个事件处理程序,就可以管理某一类型所有事件,何为事件冒泡呢,就是从事件最深节点开始,然后逐步向上传播事件,最大优点是提高性能 一般做法 <ul...break; } } } } 所写事件对应新增加元素是不起作用...值得注意是,mouseover和mouseout虽然也有事件冒泡,但是处理它们时候需要特别的注意,因为需要经常计算它们位置,处理起来不太容易。...不适合就有很多了,focus,blur之类,本身就没用冒泡特性,自然就不能用事件委托了。...我理解是:事件委托都是在外围div添加事件,当点击内部一个元素时,即使这个元素没有onclick事件,依然会从内到外执行onclick事件,js中外部div 添加事件函数内 var ev = ev

    1K20

    理解JS 原型链

    这需要我们先理解原型对象概念。 #原型对象 我们先了解原型对象概念。 每个对象都有原型对象(null除外),我们用__proto__表示,每个函数都有prototype属性,指向实例原型对象。...__proto__; // true 为了便于理解,来看一张图。 ? 恩~他们关系大概就是这样。...#原型链 原型链简单用一句话概括就是: 原型链就是 对象__proto__所连接链状结构 为了方便我们理解原型链,举一个简单例子: function F(){ this.a = 1;...#补充 constructor 说一下我经历,一开始理解原型链时,一直在prototype、__proto__、constructor在这个三个属性中绕来绕去。...为了便于理解,我把constructor放在最后了。 constructor字面意思就很容易理解,构造函数意思。

    1.7K10

    js面向对象理解

    面向对象语言有一个标志,那就是类概念,而通过类可以创建任意多个具有相同属性和方法对象。但是,ECMAScript 没有类概念,因此它对象也与基于类语言中对象有所不同。...js(如果没有作特殊说明,本文中js仅包含ES5以内内容)本身是没有class类型,但是每个函数都有一个prototype属性。...逻辑上可以这么理解:prototype 通过调用构造函数而创建那个对象原型对象。使用原型好处可以让所有对象实例共享它所包含属性和方法。...1)__proto__和prototype JS在创建对象(不论是普通对象还是函数对象)时候,都有一个叫做__proto__内置属性,用于指向创建它函数对象原型对象prototype。...Function.prototype.constructor === Function //true Object.prototype.constructor === Object //true 3)为加深对理解

    10710

    理解 Node.js GC 机制

    《深入浅出Node.js》第五章《内存控制》阅读笔记 随着 Node 发展,JavaScript 应用场景早已不再局限在浏览器中。...但随着 Node 在服务端广泛应用,JavaScript 内存管理需要引起我们重视。...heapTotal 已申请到堆内存 heapUsed 当前使用堆内存 为什么 V8 要限制堆大小: V8 为浏览器而设计,不太可能遇到用大量内存场景 V8 垃圾回收机制限制。...=1700 test.js 设置老生代内存空间最大值,单位为MB node --max-new-space-size=1024 test.js 设置新生代内存空间最大值,单位为KB 比较遗憾是,这两个最大值需要在启动时执行...新生代中对象为存活时间较短对象,老生代中对象为存活时间较长或常驻内存对象。 ?

    1.9K40

    Js中函数式编程理解

    函数式编程理解 函数式编程是一种编程范式,可以理解为是利用函数把运算过程封装起来,通过组合各种函数来计算结果。...,它着眼点是函数,而不是过程,它强调是如何通过函数组合变换去解决问题,而不是我通过写什么样语句去解决问题,当你代码越来越多时候,这种函数拆分和组合就会产生出强大力量。...所以通过这里就可以理解函数式编程其实就是强调在编程过程中把更多关注点放在如何去构建关系,通过构建一条高效建流水线,一次解决所有问题,而不是把精力分散在不同加工厂中来回奔波传递数据。...由于Js中对象传递是引用地址,哪怕我们用const关键词声明对象,它依旧是可以变。保证函数没有副作用,一来能保证数据不可变性,二来能避免很多因为共享状态带来问题。...,在我理解中柯里化实际就是实现了一个状态机,当达到指定参数时就从继续接收参数状态转换到执行函数状态。

    1.9K30

    彻底理解js闭包

    大家好,又见面了,我是你们朋友全栈君。 闭包是js一个难点也是它一个特色,是我们必须掌握js高级特性,那么什么是闭包呢?它又有什么用呢?...我们都知道,js作用域分两种,全局和局部,基于我们所熟悉作用域链相关知识,我们知道在js作用域环境中访问变量权利是由内向外,内部作用域可以获得当前作用域下变量并且可以获得当前包含当前作用域外层作用域下变量...,这个函数在a()作用域内部,所以它可以获取a()作用域下变量name值,将这个值作为返回值赋给全局作用域下变量b,实现了在全局变量下获取到局部变量中变量值 再来看一个闭包经典例子 一般情况下...原来由于js是单线程,所以在执行for循环时候定时器setTimeout被安排到任务队列中排队等待执行,而在等待过程中for循环就已经在执行,等到setTimeout可以执行时候,for循环已经结束...②闭包作为参数传递 在这段代码中,函数fn1作为参数传入立即执行函数中,在执行到fn2(30)时候,30作为参数传入fn1中,这时候if(x>num)中num取并不是立即执行函数中num,而是取创建函数作用域中

    72610

    深入理解JS事件循环

    有了规则JS世界才能稳稳运转起来,所以这些规则非常重要,但是你真的了解它们了吗? 阅读本文前可以思考下面几个问题: 你理解事件循环是怎样? 有宏任务了,为什么还要有微任务,它们又有什么关系?...本文将会由浅入深解答这些问题 深入理解JS系列 第一节:深入理解JS深拷贝 第二节:深入理解JS原型和原型链 第三节:深入理解JS事件循环 万物初始 ★本文基于chromium内核讲解 ” 刚开始让万物运转是件挺容易事情...现在JS事件循环系统就能持续运转起来啦: 循环机制解决了不能循环执行问题:引入了循环机制,通过一个 while 循环语句,线程会一直循环执行 不过又有其他问题出现了: 别的线程要交给我这个主线程任务...接下来分析一下: 调用ObjPromise传入一个函数命名为executor,executor函数接受两个参数resolve、reject,可以理解为分别代表成功时调用和失败时调用。...现在Generator和Promise都已经深入理解啦。但是微任务和协程是如何协作实现了async/await呢?

    4K60

    JSbind、apply、call理解

    概要 call、apply、bind 都是用来修改函数中this, 传参时,call是一个个传参,apply是数组形式传参,call和apply立即执行并且返回值是你调用方法返回值,若该方法没有返回值...bind是改变this后返回一个新函数,他不会立即执行。 这三个方法不会改变原方法this指向。 Bind 复制原方法传入新this指向后生成新方法,参数可传多个。...指向,第一个参数为this指向对象,后面可传多个参数。...指向,第一个参数为this指向对象,第二个参数只能为一个数组。...,作用是执行一下目标函数,执行时顺便把目标函数中this改一下,然后把结果输出,执行后,不会影响原函数中this!

    94810
    领券