javascript执行环境及作用域链分析

好久没研究javascript了,最近打算换换工作,所以又拿起来回忆一下:

 

直接从我博客里粘过来了希望对初学者有点用处吧,原文地址:http://www.dev26.com/blog/article/208

 

 

执行环境其实就是一个变量或者一个函数有权访问的所有其他数据集合。在每个执行环境中都有一个与之相关联的变量对象(VO),在当前环境中定义的所有变量和函数都会保存在这个变量对象中。VO我们是无法访问的,只有解析器处理数据的时候才有权在后台使用它。

全局执行环境是最外围的环境,一般是window对象,因此我们定义的所有全局变量、函数都被创建为window对象的属性和方法。当某个执行环境中的代码执行完毕,该环境将被销毁,其中的所有变量、函数也同样。

函数在被调用时会创建自己的执行环境,并推入一个栈中。当执行完毕,再弹出以返回到原来的执行环境中去。这个类似于C语言中的函数调用。

作用域链

代码在执行到一个环境中时,会创建由VO构成的作用域链。假如A的执行环境a中调用了函数B产生新的执行环境b,那么b的作用域链最前端将会保存b的VO,链的下面紧接着是它的包含作用域a的VO,如此一直到链的最后是全局执行环境的VO。

标识符的解析器是就是沿着当前环境的作用域链来搜索的。如:

1
2
3
4
5
6
7
var  hello = “coomy”;
function  say(){
     var  hello2 = “ming”;
     alert(hello);
}
say();   //coomy
alert(hello2);   //error 404

当say函数被调用时,对hello进行解析时,会扫描作用域链。首先是自己的VO,发现并没有这个变量,然后开始搜索其上层包含环境的VO,发现了hello。但是外层的作用域中是无法访问其所包含的作用域中的变量的,这些语法都是类似于C语言中的作用域概念。当然,作用域链可以以此类推到多层的嵌套中去。

注意,函数的参数也是被当作变量来对待的,访问规则与执行环境中的其他变量相同。

定义补充一下作用域链

当代码在一个执行环境中执行时(例如一个函数内),会创建由变量对象构成的一个作用域链(scope chain),它是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行代码所在环境的变量对象。如果这个环境是一个函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始只包含一个变量,即arguments对象(这个对象在全局环境中是不存在的,但在一个函数中呢它是这个函数当前活动对象中的第一个属性-activation object.arguments)。作用域链中的下一个对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境,全局执行环境的变量对象始终都是作用域链中的最后一个对象。标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程始终从作用域链的最前端开始,然后逐步地向后回溯,直到找到标识符为止(如果找不到标识符,通常会导致错误发生)。

请看以下代码:

1
2
3
4
5
6
7
8
9
10
11
var  color =  "blue" ;
function  changeColor(){
var  a= "3" ;
if (color== "blue"  ){
  color= "red" ;
} else {
   color= "blue" ;
}
}
changeColor();
alert( "Color is now " +color);

在上面这函数中,函数changeColor()的作用域链包含两个对象:它自己的变量对象(也就是changeColor这个函数的活动对象,对开发人员来说是不可见的只要js解析器短简,当前这函数的活动对象目前有两个属性:arguments和a两个)和全局的变量对象(全局对象中有属性color)。可以在函数内部访问变量color,就是因为可以在这个作用域链中找到它咱们画个简单的图:

在上面的函数中a属性的生命周期是在changeColor函数内部的即函数执行结束变量就会被销毁,如果我们想延长a该怎么办呢;这是一个最简单的闭包了:

1
2
3
4
5
6
7
8
9
function  changeColor(){
var  a=3;
if (color== "blue"  ){
  color= "red" ;
} else {
   color= "blue" ;
}
return  a=3;
}

通过以上代码则就可以延长a对象的生命周期.

块级作用域

在C语言中我们知道,一对花括号之间会形成一个新的作用域,也就是新的执行环境。在其中定义的变量,当离开花括号后都会被注销。

但是在javascript中,花括号、if语句、for等这些块级语句在执行完之后,其过程中定义的变量等则不会被注销,而是会被加到其外部的执行环境中去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
     var  a = 1;
}
if  (  true  ) {
     var  b = 2;
}
for  (  var  c=2; c==2; c++ ){
     var  d = 4;
}
while  (  true  ) {
     var  e = 5;
     break ;
}
switch  ( a ) {
     case  1:  var  f = 6;
     default :  var  g = 7;
}
alert( 'out:' +a+b+c+d+e+f+g); //out:1234567

 用var声明变量会将其加到距离最近的环境中;

未声明的变量被初始化,该变量会被自动加入到全局作用域中;

当前环境的变量等标识符,会覆盖其父环境中的标识符,因为作用域链中当前环境是处在最前面的,也会被最先搜索。当找到时便立即停止向下继续检索。

 


基于simulink的多能源系统协同与能源互联网的电网系统场景实例:虚拟电厂(VPP)中电网与储能集群的协同控制 本文详细介绍了使用Simulink构建虚拟电厂(VPP)与储能集群协同控制系统的完整建模过程。主要内容包括:1) VPP系统架构设计;2)分步骤建模过程,涵盖虚拟电厂系统创建、储能单元与集群建模、VPP控制器设计(核心)以及协同控制场景仿真;3)性能分析与典型应用场景。通过混合整数线性规划优化调度和智能指令分解策略,实现了VPP参与电力市场交易、电网调频调峰等功能,验证了系统在提升可再生能源消纳率(96%)、降低电网峰谷差(35%)等方面的优异性能。该建模方法为能源互联网中的分布式资源聚合与协同控制提供了实 阅读详情

相关推荐

Pipeline更多理解

Pipe 类型用途VIGVideo Image Generator:用于图层显示,支持 scaling、rotationRGB简单图层显示,较低优先级DMA主要用于 writeback / WFD / composition output,即从 framebuffer 输出到外部设备(或 memory)Cursor小图层,用于显示指针等很可能是:分别用于主屏、仪表、虚拟显示的输出路径或者用于不同的 display 去做 GPU_TARGET / writeback 的拷贝你看到的意思。

Damon_X的博客 1053

工具推荐|推荐一款非常好用的js分析在线小工具

关注它,不迷路。 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!1. 在线地址http://107.151.202.163:8129/2.工具介绍由于还没想好网站名字,目前仅以ip形式来访问,后续建设好网站后给大家发在线的网址。它是一款基于babel库做的在线小工具,功能很简单,但是都比较常用,所以我归类到一起了。左边的文本...

Python3 爬虫实战 1:应对特殊字体,爬取猫眼电影实时排行榜 2963

Silvaco Atlas新手入门:从安装到第一个半导体器件仿真(附DeckBuild配置)

本文为Silvaco Atlas新手提供了一份从软件安装、DeckBuild环境配置到完成第一个半导体器件仿真的实战指南。通过构建一个经典的PN结二极管案例,详细讲解了Atlas仿真语句的语法、核心命令顺序以及结果调试与可视化方法,帮助初学者快速上手并理解TCAD仿真流程。

sql99的博客 332

布局接口

package com.bjsasc.ui.tag; /*** * @description 能做为<code> TableTag </code>的子元素的标签都要实现此接口 * * @author caidonghai * */ public interface ILayout { /** * 获得 * @return ...

wtsoftware的专栏 179

Fiddler Everywhere保姆级教程:10分钟搞定手机HTTPS抓包(附证书配置避坑指南)

本文提供Fiddler Everywhere移动端HTTPS抓包的保姆级教程,涵盖环境配置、代理设置、证书安装及常见问题排查。重点解析如何正确安装并信任Fiddler根证书以解密HTTPS流量,帮助开发者快速搭建抓包环境,高效分析应用网络行为,提升调试效率。

git9versioner的博客 704

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1738

Javascript 执行环境,作用域链分析

文章简述了个人对执行环境,作用域链,作用域,以及它们之间关系的理解,能力有限,如果理解出错还望朋友指正!

Acmera-播客分享 442

京东/淘宝商品评论情感分析:基于Python的大规模评论爬取与NLP情感分析实战

在当今电商蓬勃发展的时代,用户评论已成为影响消费者购买决策的关键因素。本文将详细介绍如何使用Python最新技术栈爬取京东和淘宝商品评论,并运用先进的自然语言处理技术对评论进行情感分析,识别用户的好评与差评倾向。通过完整的代码实现和深入的技术解析,帮助读者掌握从数据采集到情感分析的全流程。本文详细介绍了如何使用Python最新技术栈实现京东和淘宝商品评论的爬取与情感分析。通过结合异步爬虫、反爬策略、BERT情感分析等先进技术,我们构建了一个完整的评论分析系统。高效爬取。

2201_76125261的博客 1402

对javascript的执行环境、变量对象、作用域链、环境栈等概念的综合分析

*下文对执行环境、变量对象、作用域链、环境栈的彼此相关的概念进行了综合分析,目的在于缕清它们的关系,并描述于此相对应的js执行机制。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 在js中,...

weixin_43519109的博客 246

8-阿里云服务器 ECS配置R及Studio Server

步骤概览:(首先要明确自己的系统然后进行安装)

hx2024的博客 1570

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

简单理解javascript作用域链

套娃思维: 简单理解js的作用域链(scope chain),就好比一个套娃,最外面的总是当前执行的函数,第二层套娃是最外面(当前执行环境)的外部环境,第三层套娃又是第二层套娃(执行环境)的外部环境,依次类推,最里面的一般是全局执行环境,js在搜索变量时总是从套娃的最外面(当前执行环境)搜索到最里面(全局执行环境)。 当然,既然是链,其中每一个单元,都是一个作用域或者成为执行环境,js背后对每一...

止水 551

工业级实战:C#实现欧姆龙PLC FINS-TCP通信(协议解析+完整源码+避坑指南)

// FINS主命令码+子命令码枚举(工业级常用指令)ReadData = 0x0101, // 读取数据WriteData = 0x0102, // 写入数据ReadPlcStatus = 0x0601, // 读取PLC状态ResetPlc = 0x0605 // 复位PLC(慎用)/// 欧姆龙PLC数据区枚举(工业常用)CIO = 0x30, // CIO区(核心数据区)WR = 0x31, // 工作区HR = 0x32, // 保持区。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 656

转:JS高级学习笔记(8)- JavaScript执行上下文和执行栈

必看参考: 请移步:博客园 JavaScript的执行上下文 深入理解JavaScript执行上下文和执行栈 JavaScript 深入之执行上下文 写在开头 入坑前端已经 13 个月了,不能再称自己为小白,那么现在就来学习一下 JS 的执行相关的知识。 自己吹过的牛皮,含着泪跪着也要实现它! 比如,先定一个小目标:成为高级前端。加油! 废话少说,进入正题 执行上下文 执行上...

weixin_30651273的博客 137

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 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")

面试官问你这些,其实是在问你JavaScript执行原理!

旧书里常讲 VO 是全局的变量对象,AO 是函数的变量对象,而 VO 会绑定到 GO(window/global)上。TDZ 其实是更满足我们直观的编程特性,很多其他语言天然支持,so JavaScript 又在弥补自己的设计缺陷?当成作用域链的一部分,使得“找变量时”会先查这个对象属性。,一个是作用域块,一个是对象,但却是两个不同的东西。ER(环境记录)是用来真正“存变量、查变量”的地方。OER 内没有“自有存储”,所有变量查找实际上是 ​。环境记录是 JS 变量体系的“底层数据结构”。

小秀的博客 517

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

js中的词法分析

js中的词法分析:当js中的函数执行时,先分析后执行。 1.词法分析要做几件事??1).分析参数2).分析变量3).分析函数 分析顺序如上。 2.如何分析变量声明 如var str='xin'这个语句是先分析 声明var str 此时值是undefine 这个语句等价于:function test(){ var str;alert(s...

171

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JS----预编译(执行环境)

JavaScript 详解预编译原理: 参考学习:https://www.jb51.net/article/103973.htm JS执行顺序-函数声明提升、匿名函数、函数表达式 参考学习:https://www.cnblogs.com/can-i-do/p/8574450.html 脚本执行js引擎都做了什么呢? 语法分析 预编译 解释执行 语法分析很简单,就是引擎检查你的代码有没有什么低级的...

weixin_41989325的博客 217

执行模型浅析

  大家有没有想过,一段javascript脚本从载入浏览器到显示执行都经过了哪些流程,其执行次序又是如何。本篇博文将引出'javascript执行模型'的概念,并带领大家理解javascript在执行时的处理机制。 简单的开始 简单的代码: 01 <scripttype="text/javascript"src="xxx.js"&gt...

baoaoba9317的博客 99

浅谈JS引擎

JS 引擎 我们知道不同的浏览器有不同的 JS引擎。我们经常接触到的是 V8引擎(V8是谷歌发布的开源的 JavaScript 引擎,采用 C++ 编写,在谷歌的 Chrome 浏览器中被使用) JS引擎执行过程大致分为下面三个阶段 : 一、语法分析 二、预编译阶段 三、执行阶段 注意:浏览器先按照 js 的顺序加载 <script> 标签分隔的代码块,js 代码块加载完毕后会执行上面三个阶段。接着会找下一个代码块,继续执行上面的三个阶段。这些脚本代码块都在同一个全局作用域中。 .

xiaoshuai0123的博客 312

再谈JS——JS性能提高之解除引用

前言  其实在V8引擎下,JavaScript的性能已经得到大幅度提高,这里探讨的是在理论层面,具体一点就是JS的垃圾回收机制,可以提高Javascript性能的一种途径或者方式,也算是一篇读后总结吧,这里参考了《JS高程第三版》的第四章有关JS内存管理的讲解。 正文  我们先来看看,如何做可以在理论上提高JS的性能,我们来看两段代码: 代码段A function createPerson(nam...

AngelLover2017的博客 2258

JavaScript全局变量和局部变量的区别

1 2 3 4 5 6 7 8 9 10 <script type="text/javascript"> vara = 1; functionhehe() { window.alert(a); vara = 2; window.al...

weixin_30727835的博客 273

前端基础进阶(四)-让你一分钟就看懂的作用域和作用域链

对于作用域和作用域链本身就是一个非常简单的一个概念,但是反而是这些简单的概念大家却不明白,困惑的原因是别的文章里,常常会提到词法作用域,词法分析等概念,到底是什么东西?好像和我自己觉得的不一样,但是却又不知道哪里不对. 为了避免接下来更多的同学造成同样的困扰,我写了一篇名为(v8引擎是如何工作的)文章,为大家分析JS的工作原理。后续会整理进入基础进阶系列文章。大家可以随时阅读。 词法环境(Lex...

qq_43623970的博客 207

javascript作用域链(Scope Chain)初探

来源:http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/17/1457674.html ------------------------------------------------------------ 关于js的作用域链,早有耳闻,也曾看过几篇介绍性的博文,但一直都理解的模棱两可。近日又精心翻看了一下《悟透Javascr...

weixin_30906671的博客 69

【前端进阶】04 JavaScript引擎是如何执行JavaScript代码的

通过外部词法环境的引用,作用域可以层层拓展,建立起从里到外的一条作用域链,当某个变量无法从自身环境中找到时,可以根据外部词法环境向外找,直到最外层的词法环境中外部词法环境引用为null。

G.E.M.千百度的博客 807

JS学习之执行环境和作用域

JS学习之执行环境和作用域 执行环境和作用域相关介绍 执行环境 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。 变量对象 每个执行环境都有与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。 虽然我们在编写程序时,无法访问这个对象,但是解析器在处理数据时会在后台使用它。 全局执行环境 全局执行环境是最外层的一个执行环境。根据ECMAScript实现所...

shandamengcheng的博客 136

理解Javascript_12_执行模型浅析

大家有没有想过,一段javascript脚本从载入浏览器到显示执行都经过了哪些流程,其执行次序又是如何。本篇博文将引出'javascript执行模型'的概念,并带领大家理解javascript在执行时的处理机制。   简单的开始 简单的代码: 1 2 3 4 5 6 7 8 9 10 11 script type="text/javascrip

WHACKW的专栏 535
上一篇: javascript垃圾收集程序
下一篇: 新站如何提高百度权重
wtsoftware
博客等级 码龄19年 12粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值