全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Javascript 链式作用域详细介绍

 Javascript 链式作用域

其实对于Javascript链式作用域的描述,包括,JS权威指南,都有些太冗长了--但是很准确:JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里。

这句话有点难懂,但程序的设计,基本都是为了简单,便于理解的。记住JS中经典的一句话是,一切皆对象。

说白了链式作用域,其实就是Javascript的一个特性:子函数中可以访问父函数的所有变量。当然也包括全局变量window(一般的函数定义function a(){},其实都是window对象的子函数)。另外补充一下,函数定义有两种方式,其实略有差别:

var a=function(){}和function a(){},

稍后再解释他们的区别。

所以,我们看Crockford的<<Javascript语言精粹>>中就提到,要在一个函数中定义变量,要养成良好的习惯,请直接在函数开头定义变量。JS中这点上有别于其它语言的要求----尽量推迟变量定义(使用前定义)。

我们看一下laruence提供的例子:

var name = 'laruence';
functionecho(){
   alert(name);
   var name = 'eve';
   alert(name);
   alert(age);
}
 
echo();

这个例子其实很有迷惑性(会让人错误的以为,输出结果是:laruence,eve,error;其实结果是:undefined,eve,error),关键就是因为echo()函数中定义的var name='eve'。但其实换个写法,这个例子就很清楚了:

var name = 'laruence';
function echo() {
   var name;
   alert(name);
   name = 'eve';
   alert(name);
   alert(age);
}
 
echo();

其实,上面的函数在JS引擎解析的时候,就会被解析成这样。如果你是初学者,其实这样理解就可以了。但如果你有别的程序的编程经验,例如java。就很容易被惯用思维给套住了,PS:本人就是给套住的一个。所以,还是按照Crockford的建议把,定义变量,请在函数顶部!!

还记得之前的问题吗?

 var a=function(){}和function a(){}的区别。

它们的区别还变量的定义比较类似。一切皆对象。

他们两个在函数调用时,基本是等价的,但如果调用函数,在定义函数前就会有问题了。其实区别在于等号和function关键字。
var和function定义在预编译的时候被提前,var只是占位,具体赋值要等到JS引擎执行到这行。而function定义会在JS引擎预编译阶段就被直接放入到调用对象中。

还是要举例:

例子一:

alert( echo );//function echo(){return 1;};
function echo(){return 1;};
alert( a );//undefined
var a=function(){return 1;};

所以,函数的定义也可以引申出一句话,请将函数定义放在顶部(先定义后调用)!!

其实还是习惯的问题,JS中一些代码的优良习惯有别于其它语言。建议大家读一下<<Javascript语言精粹>>。在开始学习一门语言时,最好从欣赏优秀的代码开始。而JS中,大家都喜欢用一系列充满迷惑性的代码来加深自己的理解,这其实是一个误区。

另外说一点,this关键字,laruence的解释很简洁到位:"谁调用,谁就是this"。英文版更详细一点:“In JavaScript this always refers to the “owner” of the function we're executing, or rather, to the object that a function is a method of. ”,中文解释:“在JavaScript中,this永远引用我们所执行函数的拥有者,更准确的说,this引用一个函数的方法对象”。

看看下面的例子,也是误导人的:

function a(){
 g_value="uk";
}
a();
alert(g_value);

其实,比较友好的写法应该是这样:

function a(){
 this.g_value="uk";
}
a();//a.apply(this);
alert(this.g_value);

关于this关键字,和别的语言也有区别。首先它并不是实例的引用,而是调用它的上下文。上面例子的a(),等价于a.apply(this);

call和apply的用法是一样的,区别就在参数传递上。一个是一个一个传参数的,一个是将参数作为类数组传递的(注意这个地方是类数组)。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Javascript  # 链式作用域  # JS  # JS链式作用域详解及实例  # js实现楼层导航功能  # js获取浏览器和屏幕的各种宽度高度  # 基于JS实现移动端向左滑动出现删除按钮功能  # js实现带简单弹性运动的导航条  # javascript 网页进度条简单实例  # javascript 操作cookies详解及实例  # js实现简易垂直滚动条  # 微信小程序 引用其他js文件实现代码  # 链式  # 都是  # 是一个  # 句话  # 自己的  # 一切皆  # 他们的  # 一个函数  # 就会  # 让人  # 也有  # 会有  # 放在  # 就在  # 你是  # 结果是  # 的说  # 是这样  # 迷惑性  # 很有 


相关文章: 建站之星备案流程有哪些注意事项?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  南平网站制作公司,2025年南平市事业单位报名时间?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  建站主机系统SEO优化与智能配置核心关键词操作指南  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何在IIS7上新建站点并设置安全权限?  Android自定义控件实现温度旋转按钮效果  网站制作员失业,怎样查看自己网站的注册者?  移民网站制作流程,怎么看加拿大移民官网?  制作网站怎么制作,*游戏网站怎么搭建?  PHP 500报错的快速解决方法  建站之星安装失败:服务器环境不兼容?  C#怎么创建控制台应用 C# Console App项目创建方法  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  ,在苏州找工作,上哪个网站比较好?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  网站制作公司排行榜,抖音怎样做个人官方网站  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何确保FTP站点访问权限与数据传输安全?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站之星2.7模板:企业网站建设与h5定制设计专题  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  定制建站哪家更专业可靠?推荐榜单揭晓  临沂网站制作企业,临沂第三中学官方网站?  网站微信制作软件,如何制作微信链接?  如何高效生成建站之星成品网站源码?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何通过建站之星自助学习解决操作问题?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何高效完成自助建站业务培训?  linux top下的 minerd 木马清除方法  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  ,石家庄四十八中学官网?  建站主机默认首页配置指南:核心功能与访问路径优化  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  中山网站推广排名,中山信息港登录入口?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  C#如何序列化对象为XML XmlSerializer用法  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  XML的“混合内容”是什么 怎么用DTD或XSD定义 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。