JavaScript作用域链和原型链

1.原型链和作用域链的区别、2.js判断类型、3.async和await是干什么的 1.原型链和作用域链的区别、2.js判断类型、3.async和await是干什么的 (Date/2023/2/3) 阅读详情

JavaScript作用域链和原型链

  1. 作用域链
  • 作用域

    ​ 作用域,是指变量的生命周期(一个变量在哪个范围内保持一定的值),在JavaScript中,作用域分为以下几种:全局作用域、函数作用域、块级作用域、动态作用域。

    • 全局作用域

      全局变量存在于整个程序中,程序中的任何函数、任何方法均可访问全局变量,但全局变量不能滥用,所以操作或使用未生命的变量,JS会默认生命此变量为全局变量。

    • 函数作用域

      函数作用域内,对外是封闭的,外层无法直接访问内部变量,内部可访问外层的变量

    • 块级作用域(ES6)

      使用功能let关键字声明,可形成块级作用域

    • 动态作用域

      this引用会存在动态作用域

    • 执行上下文

      ​ 执行上下文即当前代码的执行环境,可以描述成是一个包含变量对象、活动对象、作用域链和this的数据结构。

    • 作用域链

      ​ JS所有函数都有它的执行环境(执行上下文),当它执行的时候会被压入环境栈,如果执行完毕,会将当前环境弹出,执行环境中有函数作用域中定义的变量和其他信息,作用域链最顶端是当前执行环境,下一个是上层环境,一直到Windows对象。举个例子:

      function Outer(){
          var out = 123;
          Inner();
          function Inner(){
              var inner = 456;
              console.log(out,inner);   //123,456
          }
      }
      Outer();
      

      Inner内部既可以访问Inner的作用域,也可以访问Outer的作用域。因此,当多个作用域互相嵌套时,就形成了作用域。词法作用域在查找标识符的时候会就近查找,从当前作用域向外逐层查找,当抵达最外层作用域依然没有找到,则停止查找。如果是RHS则会抛出错误,如果是LHS则会在全局范围内声明该变量。

    • 闭包

      定义:函数在定义的作用域以外的地方被调用,闭包使得函数可以继续访问定义时的作用域。举个例子:

      function fn(){
          var temp = 123;
          function func(){
              console.log(temp);
          }
          return func;
      }
      var func = fn();
      func();      //123
      

      func则是有一个闭包函数,使得全局范围可以访问fn函数作用域内部的变量temp,且函数执行完后,fn对象的活动变量不会被销毁,因为fn返回的函数func的作用域链还保持着fn的活动变量,因此JavaScript的垃圾回收机制不会回收fn活动变量。综上所述,闭包会引起内存泄漏,尽量不要使用闭包。

    • 垃圾回收机制

      JS的垃圾回收机制分为两种,分别为标记清除和引用计数

      • 标记清除:垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记,然后它会去掉环境中的变量以及环境中的变量引用的变量的标记,如果此时还存在有标记的变量就视为准备删除的变量,因为环境中的变量无法访问到这些变量,最后垃圾收集器完成内存清理,销毁这些变量并回收内存。
      • 引用计数:记录每一个值被引用的次数,当声明一个变量并将一个引用类型值赋给该变量时,该变量的引用次数加一,如果一个值又被赋给另外一个变量,则该值的引用次数减一,当这个值的引用次数为0时,就说明没有办法再访问这个值了,就可以回收该变量的空间,当垃圾收集器下次运行时,它会释放这个值占用的内存。
  1. 原型链
  • 原型

    ​ 所有的函数都有一个特殊的属性:prototype,prototype属性是一个指针,指向原型对象,原型对象中的方法和属性都可以被函数的实例所共享。通过构造函数创建的对象实例都可以共享构造函数的原型的方法。举个例子:

    var Person = function(name){
        this.name = name;
    }
    Person.prototype.sayName = function(){
        console.log(name);
    }
    var person = new Person('aa');
    person.sayName();  //aa
    

    上述例子中对象person是Person构造函数创建的实例,通过new操作符调用构造函数时主要执行以下几个步骤:

    • 创建新的对象,并将函数的this指向新创建的对象
    • 执行函数
    • 返回新创建的对象

    通过构造函数创建的对象,内部有一个_proto_指针指向构造函数的原型对象

    构造函数的原型对象有一个constructor属性,指向构造函数

    • 原型链

      当执行以下代码时:

      person.toString();
      

      首先会在person实例中查找toString属性,发现不存在该属性;会转到Person原型对象去找toString属性,仍然不存在;接着到Person原型对象的_proto_指向的Object原型对象中找,终于找到,然后执行toString方法。这样整个串起来就是一条原型链,原型链的顶端为null

    prototype:构造函数具有的属性,指向调用构造函数而创建的实例的原型

    _proto_:指向对象的原型

    constructor:原型对象的属性,指向原型对象对应的构造函数

    在这里插入图片描述

  1. 作用域链和原型链的比较
  • 作用域链是主要的作用是查找标识符,从当前作用域沿着作用域链依次查找,如找到会停止查找,否则会继续查找,直到尾部;尾部依然没有找到的情况分为两种,如果RHS,会抛出未找到变量的错误,如果是LHS,会在查找的最外层声明变量。
  • 原型链是用于查找引用类型的属性,沿着作用域链依次向上查找,如果找到该属性会停止查找并作出相应的操作,否则会沿着原型链依次查找到结尾,尾部依然没有找到的情况分为两种,如果是RHS,会返回undefined,如果是LHS,会在该对象实例中声明变量,不会去查找原型链。
强大的原型和原型链 深入理解JavaScript系列(5):强大的原型和原型链 立即下载

相关推荐

js原型链详解

javascript的原型与原型链的详细的解析,一篇从认识到熟悉深入的好文章!

JavaScript中的链(作用域链、原型链)

JavaScript中的链(作用域链、原型链) Js中存在两种老生常谈的链,作用域链和原型链。作用域链是为了访问变量而存在的链,原型链是访问对象的属性而存在的链。 作用域链 说到作用域链,首先来说下作用域的概念:执行代码的上下文,也可以说是变量对象,是开始进入一个函数的执行环境的时候,形成的所有可访问变量,可以说变量对象是作用域的实体。 作用域分类:全局作用域、函数作用域(块级作用域)、eval作...

low666的博客 1618

JavaScript作用域、闭包、对象与原型链概念及用法实例总结

本文实例讲述了JavaScript作用域、闭包、对象与原型链概念及用法。分享给大家供大家参考,具体如下: 1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域。 如前述,JS的在函数中定义的局部变量只对这个函数内部可见,称之谓函数作用域。 嵌套作用域变量搜索规则:当在函数中引用一个变量时,JS会搜索当前函数作用域,如果没有找到则搜索其上层作用域,一直到全局作用域。 var value = 'global'; var f1 = function(){ console.log

作用域链与原型链的详解

所以这个叫做arguments的东西也是个对象,而且是一个特殊的对象,它的属性名是按照传入参数的序列来的,第1个参数的属性名是’0’,第2个参数的属性名是’1’,以此类推,并且它还有length属性,存储的是当前传入函数参数的个数,很多时候我们把这种对象叫做类数组对象。最后我们还可以看到arguments还有一个叫做callee的属性,这个属性是表示的是当前函数的一个引用,简单点说,这个属性里面存储的我们调用的这个函数的代码,实在无法理解的时候,又到了console.log大显身手的时候了。

m0_69977307的博客 380

深入解析π型滤波电路:RC与LC滤波器的实战选型指南

本文深入解析了π型滤波电路的工作原理与实战选型。重点对比了RC型与LC型滤波器的核心差异:RC型成本低、体积小,但存在压降与能耗,适用于小电流场景;LC型效率高、滤波性能好,但成本与体积较大,适合中到大电流及高纹波抑制需求。文章提供了基于不同应用场景的选型指南与设计要点,帮助工程师做出精准决策。

weixin_29291069的博客 654

WRF后处理避坑指南:从namelist配置到降水计算的全流程解析

本文提供了一份详尽的WRF模式后处理避坑指南,涵盖从理解wrfout文件结构、核心变量解析到累计降水计算与专业气象图绘制的全流程。重点解析了RAINC与RAINNC的正确处理方法,并分享了使用wrf-python库高效绘制位势高度叠加风场图、累计降水图等专业图表的实战技巧与代码,旨在帮助用户规避常见错误,提升后处理效率与图表质量。

weixin_29200485的博客 353

重温JS——原型、原型链、作用域

问题: var f1=new Function("var a=20;conole.log(a)") f1(10) //形参在哪写呢

qq_52301431的博客 458

腾讯云服务器被攻击,带宽被占满的抗战日记

故事 时间:2021-08-23 地点:腾讯云服务器 事件:服务器内容被黑,修复后某人气不过,开始DDOS,占满服务器的带宽,导致网站访问非常缓慢。 杂记 根据腾讯云后台+宝塔后台,带宽被占满:(小垃圾水管没办法) 部分参考:记一次阿里云服务器ECS流出带宽占满的解决过程 https://blog.youkuaiyun.com/wangzhihao1994/article/details/99563456 首先是在云主机上使用远程连接访问到云主机,安装iftop工具 CentOS .

Rudon滨海渔村的博客 1303

js作用域链和原型链

如果要理解作用域链就要先理解作用域,所以要先明白作用域 一、作用域 作用域就是变量与函数的可访问范围 即作用域控制着变量与函数的可见性和生命周期 二、作用域分为全局作用域和局部作用域 全局作用域:代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。 局部作用域:在固定的代码片段才能被访问。函数内部的声明式函数也是局部函数 三、[[scope]] [[scope]]...

ANGWH的博客 622

9.9元ESP32-C3开发板实战:手把手教你用VSCode搭建RT-Thread最小系统(附避坑指南)

本文提供了一份详尽的实战指南,教你如何在售价仅9.9元的ESP32-C3开发板上,使用VSCode搭建RT-Thread最小系统。内容涵盖从ESP-IDF环境配置、BSP源码获取、内核补丁应用到编译下载与调试的全流程,并重点分享了版本选择、补丁应用等关键避坑技巧,旨在帮助开发者低成本、高效地启动嵌入式实时操作系统开发。

o4p5q6r7s的博客 226

pyecharts可视化图表-tree:从入门到精通

本文系统介绍了树图(Tree Chart)的可视化技巧,包含基础实现、方向定制和环形布局等实例。树图能清晰展示层次结构数据,适用于组织架构、文件系统等场景。教程详细解析了pyecharts树图的核心配置项,包括数据准备、方向设置(下上、右左)和样式定制,并提供了完整代码示例。通过本指南,读者可快速掌握专业树图的构建方法,实现复杂层次数据的可视化呈现。

大数据内容个人总结与分享 1970

深入理解js原型链和作用域链,了解作用域链和原型链的区别

深入理解js原型链和作用域链,了解作用域链和原型链的区别一、原型链二、作用域链三、原型链和作用域链的区别:总结 一、原型链 每一个构造函数都有一个prototype属性,这个属性就叫原型对象。 每一个构造函数new出来的对象都有一个–proto–属性,这个属性指向原型对象。 <script> function Car(){ //实例属性: //this.produce = ‘chevrolet‘, this.price = 8

qq_43305958的博客 1332

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6716

简谈JS的原型链和作用域链

谈起js的原型链和作用域链,我觉得还是和图结合起来说比较明白,手绘了一些图片,图片看起来虽然比较丑,但是结合起来理解地应该比较清楚

博勋的博客 3174

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

简单光学 1万+

2026华为OD机考新系统真题 + 双机位C卷 + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 45万+

js中的作用域链和原型链

最在在学习前端一些技术,首先就看了js红宝书,觉得这本书确实讲的很细致,值得看,接下来就是根据我看的我自己理解的对作用域链和原型链的总结。作用域链:提到作用域链,大家应该都会想到一个名词执行环境,执行环境就是代码执行时的作用域,与执行环境相对应的一个就是变量对象,每一个执行环境都对应一个变量对象,变量对象是存储该执行环境里函数和变量的一个对象。当代码执行的时候,会根据变量对象生成一个作用域链。作用...

HUOJUNHUAN的博客 637

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

javascript作用域链和原型链

最近在学习javascript的过程中,先由明了,再到困惑,现在又步入了明了的阶段。 那么就说说原型链和作用域链的问题,刚学习的时候,这两者是分开学的,并没有 在这两者之间有困扰,但是当回过头来综合学习的时候,却在这两者之间产生了困惑, 后来经过学习,发现原来这两者完全属于不同的范围,只不过名字相似而已,发生 困惑的就是他们寻找目标的方式几乎一样,都是有链顶到链尾的顺序。 其实区分他们的

知其所以然 1133

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

js 作用域链与原型链的区别

一句话,作用域链是查找是否有这个对象而原型链是查找这个对象是否有某个属性

pangwoniu的博客 629

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?

什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么? 什么是作用域链,什么是原型链。 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==&gt;函数1作用域==&gt;函数2作用域 作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找。 如: 复制代码 var a = 1; function b(){ ...

m0_37677567的博客 337

什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?学习笔记

复习这个知识点发现有个博主写的非常好理解,以下是他的博客链接,这里记录学习 http://www.cnblogs.com/pssp/p/5204324.html 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么? 什么是作用域链,什么是原型链。 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==&amp;gt;函数1作用域==&amp;gt...

lm_four的博客 611

JS 通过沿着作用域链还是原型链查找变量

这是一道非常典型的JS闭包问题,结果和具体的解析请看这里。对于其中的`函数作用域链的问题`博主似乎没有解释清楚,有一些疑问:js中的变量到底是沿着作用域链还是原型链查找呢?首先,要分清作用域链与原型链的区别,简单来说作用域链是相对于函数的,原型链是相对于对象的js中访问变量有多种方式1. 直接通过标识符访问2. 通过 . 或 [] 访问对象中的标识符猜想访问方式不同,导致了查找的方式不同:1. 直...

maohuihua的专栏 1053
上一篇: Javasript数据类型
下一篇: JavaScript创建对象的7种方式
codezha
博客等级 码龄10年 28粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值