不知道,大家对语言中变量的“声明”与“定义”是怎么理解的,
我的理解如下:
“声明”变量,只是仅仅声明,而“定义”变量,指声明了,并且赋值了。
例如:
复制代码 代码如下:
var name;//只是声明
var num = 11;//声明,并且赋值,即定义了
var password = "yangjiang";//声明,并且赋值,即定义了
下面是几点总结:
变量的作用域:全局的和局部的。(注意:如果尝试读取一个未声明的变量的值,javascript会生成一个错误)
第一点:在都使用var关键字修饰变量的情况下,如果给一个局部变量或函数的参数声明的名字与某个全局变量的名字相同,
那么就有效地隐藏了这个全局变量。
例如:
复制代码 代码如下:
var scope1 = "global";//var修饰
function checksScope(){
var scope1 = "local";//var修饰
document.write(scope1);
}checksScope();//local
第二点:如果尝试给一个未用 var 关键字声明的变量,那么,隐式声明的变量总是被创建为全局变量,即使
该变量只在一个函数体内使用(只有该函数运行了,才会发生作用),注意不支持函数嵌套的情形。
例如:
复制代码 代码如下:
scope2 = "globalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
function checkScopeA(){
scope2 = "localAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write("<br/>"+scope2);
myscope = "myLocalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write(","+myscope);
}
checkScopeA();//localAAAAA,myLocalAAAAA *A
document.write("<br/>"+scope2);//localAAAAA *B
document.write("<br/>"+myscope);//myLocalAAAAA *C
如果将上面的例子中的 *A处的代码注释掉,
例如:
复制代码 代码如下:
scope2 = "globalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
function checkScopeA(){
scope2 = "localAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write("<br/>"+scope2);
myscope = "myLocalAAAAA";//没有使用var修饰(js会默认将其声明为全局变量)
document.write(","+myscope);
}
//checkScopeA(); *A
document.write("<br/>"+scope2);//globalAAAAA *B
document.write("<br/>"+myscope);//发生错误 *C
因为函数checkScopeA没有执行,所以 *B处输出为globalAAAAA;
因为函数checkScopeA没有执行,所以变量myscope没有声明,如果尝试读取一个未声明的变量,会发生错误。
第三点:
在javascript中,函数的定义是可以嵌套的。由于 每个函数都有它自己的局部作用域,所以有可能出现几个局部作用域的嵌套层。
例如:
复制代码 代码如下:
var scope3 = "global scope"; //定义了一个全局变量
function checkScopeB(){
var scope3 = "local scope"; //定义了一个局部变量,覆盖了全局变量scope3
function nested(){
var scope3 = "nested scope"; //在函数的函数的内部,定义了一个局部变量
document.write("<br/>"+scope3); //nested scope
}
nested();
}
checkScopeB();//nested scope
第四点:
在javascript中,没有块级作用域,函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有声明的。
在javascript中,没有块级作用域,函数中定义的所有变量,无论是在哪里定义的,在整个函数中它们都是有定义的。
例如:
复制代码 代码如下:
function test(o){//根据以上的说明:此函数中的i,j,k三个变量的作用域是相同的。
var i = 0; //变量 i 在整个函数中都有定义
if(typeof o == "object"){
var j = 0 ; //变量 j 在整个函数中都有定义,而不仅仅是在 if 语句块
for(var k=0;k<10;k++){//变量 k 在整个函数中都有定义,而不仅仅是在 if 语句块
document.write("<br/>k的值为:"+k);
}
document.write("<br/>for循环外k的值:"+k);//此时的 k 仍然被定义了,k=10
}
document.write("<br/>j的值:"+j); //变量 j 被声明了,但可能没有被初始化 因为可能往函数中 传入的参数 不是对象 ,if语句块不会执行
}
下面通过两种方式调用此函数:
方式一:传入对象
test({});//输出结果:上例中的注释
方式二:什么都不传
test();//输出结果:j的值:undefined
想不明白的是,在第二种方式中的输出结果,为什么会是 undefined。我当时猜的是:j的值:0
后来,这本书上面说:
由于局部变量在整个函数体内都是有声明(或定义)的,这就意味着在整个函数体中都隐藏了同名的全局
变量。虽然 局部变量在整个函数体内中都是有声明(或定义)的,但是在执行var语句之前,它是不会被初始化的。
这样的话,上面的方式二调用的输出结果,就比较好解释了,由于变量j在整个函数中都有定义,而又由于传入函数的参数为空,所以函数体中的if语句不会执行,从而使得j的值为undefined.(这是我参照上面书上说的那句话的理解)
下面的例子,更好的说明:
复制代码 代码如下:
var sssss = "全局变量";
function f(){
document.write("<br/>"+sssss);//输出:undefined 而不是输出"全局变量"
var sssss = "局部变量";
document.write("<br/>"+sssss);//输出:局部变量
}
相关推荐:
ChatGPT页面打不开怎么办?这些解决方法让你轻松访问AI助手!,分散ai
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
什么是蜘蛛弛?揭秘这个SEO优化背后的神秘工具,南沙seo优化排名价格
SEO自己:打造属于你的数字营销利器,微信裂变营销推广软件
GPT哪个模型是最新的?AI语言生成的未来,ai回头
SEO领站-从零到一打造成功网站排名的秘密,轻淘客seo怎设置
SEO这样做,轻松引爆流量,助力企业成长,无极标准网站优化好处
AI助手不需要登陆-畅享便捷生活,随时随地高效工作,ai客服 对话
seo用什么写属性写,seo属于什么 ,芭田科学施肥AI
SEO要好,网站流量翻倍的关键秘诀,品牌网站建设关键词优化
seo独立站是什么,独立站推广是什么 ,ai曲线笔刷扩展
SEO能给企业带来什么价值,seo的影响 ,ai蓝衣美女
SEO和品牌营销:如何通过搜索引擎优化打造品牌影响力,建邺seo软件
什么是seo长尾词,什么是seo长尾词的概念 ,绿茶ai换脸杨超越
ChatGPT,您的银行卡被拒绝了?别慌,这些方法帮您快速解决问题!,ai给那个标声调
seo要会些什么,seo需要学些什么内容 ,轻盈ai
亚马逊seo是什么公司的,“亚马逊” ,ai玩底特律
AI一键生成文章免费:革新写作方式,提升创作效率
SEO快速优化技术:助力网站流量暴增,轻松登顶搜索引擎,铜陵ai全网通推广软件
ChatGPT当前不可用?背后的原因与解决方案全解析,ai propos
【SEO优化全攻略】提升网站流量的终极秘籍,带你轻松玩转搜索引擎优化!,金融网站推广维护
seo软件是什么职位,seo用的是什么软件 ,ai感知树
SEO优化排名:让您的网站在搜索引擎中脱颖而出,我ai 达瓦仓决
SEO是什么意思?揭秘SEO的真正含义与重要性,公司推广网站询问d火18星来
seo需要了解什么,seo需要学些什么内容 ,ovo ai
ChatGPT服务异常:为何影响到你的工作和生活?如何有效解决?,ai怎么保持圆角不变
AI一键生成文章,写作新境界
ChatGPT发生故障,背后隐藏着哪些不为人知的原因与挑战?,硬件ai和软件ai
GPT-3.5可以免费使用吗?AI未来的无限可能,ai烧猪
SEO优化快:如何在短时间内实现网站流量爆发,Lacey0508ai
ChatGPT坏了用什么?替代方案,满足你的智能对话需求,星际一的ai
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
SEO监控:精准把握网站排名与优化成效的利器,湖南seo排名商家名单
SEO快速提升SEO排名的有效策略:让你的网页飞跃搜索引擎,ai调色食物
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
ChatGPT画布打不开?如何解决这一常见问题?,Ai怎么储存为Ai格式在桌面
什么是seo如何进行seo,何谓seo ,红米的AI摄影什么意思
SEO售产-数字营销新战场,助力企业实现盈利增长,去哪找自贡网站建设
SEO师:如何在数字时代为企业赢得流量与销量,十堰网站关键词优化教程
ChatGPT40不收费版本:科技革新,智能助手助力生活与工作,ai医疗武器有哪些
SEO量:提升网站流量和排名的关键法则,德兴seo
文章AI生成:让创作变得更简单、更高效!
ChatGPT免费版每天提问有次数限制吗?揭秘如何高效使用AI助手!,机甲ai手绘
AI仿写文章:开启内容创作新纪元
360刷排名工具选哪家?揭秘2025年最强排名优化工具!,ai写作网站哪个好一点
优化工具:提升工作效率的秘密武器,网站模板的优化策略是什么
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
ChatGPT怎么打开不了?全方位解决方案!,大庆ai
SEO收集:如何通过有效数据收集提升网站排名,鞍山商城网站建设报价
SEO而且:打造高效网站流量增长的秘密武器,滨江网站推广营销