问题描述

本篇文章主要讲解javascript变量及其作用域。

1   内容区

在js中,变量大致可分为全局变量(全局作用域)和局部变量(局部作用域);

用关键字var定义变量(全局变量,可以省略var关键字,但局部变量不建议这么做,否则容易造成全局变量被覆盖或者重写)

1.1   变量声明

当只是声明变量,但未给变量赋值时,则默认值为undefined

fucntion f(){
var varParam;
console.log(varParam);//undefined
} f();

1.2  当全局变量与局部变量重名时,局部变量覆盖全局变量

var  Scrope="Global  Scrope";//全局变量
function f(){ 
var Scrope="Local Scrope";//局部变量
console.log(Scrope);//Local Scrope
}

1.3  局部变量省略var,造成全局变量被覆盖

var  Scrope="Global  Scrope";//全局变量
function f(){
Scrope="Local Scrope";//局部变量定义省略var关键字,造成覆盖全局变量内容(重写全局变量)
console.log(Scrope);//Local Scrope
}

1.4  作用域嵌套

var scope="global scope";//全局变量
function checkscope(){
var scope="local scope";//局部变量
function nested(){
var scope="nested scope";//嵌套作用域的局部变量
return scope;//返回当前作用域的值
}
return nested();
} checkscope()

1.5  函数作用域

在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码之外是不可见的,我们称之为块级作用域(block scope),但JavaScript中没有块级作用域,用函数作用域(function scope)代替。

JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。

function test(o){
var i=0;//i在整个函数体内均是有定义的
if(typeof 0=="object"){
var j=0;//j在函数体内是有定义的,不仅仅是在这个代码段内
for(var k=0;k<10;k++){//k在函数体内是有定义的,不仅仅是在循环体内
console.log(k);//输出0~9
}
console.log(k);//k已经定义了,输出10
}
console.log(j);//j已经定义了,但可能没初始化
}

1.6  变量声明提前

由于JavaScript中,函数内声明的所有变量在函数体内始终是可见的,这意味着变量在声明前甚至已经可用,这个特性被非正式地称为声明提前(hoisting),即JavaScript函数里的声明的所有变量(但不涉及赋值)都被“提前”至函数体的顶部。

 var scope="gloabal";
function f(){
console.log(scope);//输出“undefined“,而不是”global”
var scope="local";//变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的
console.log(scope);//输出“local”
}

如上代码等价于如下代码

 var scope="gloabal";
function f(){
var scope;//在函数顶部声明了局部变量,覆盖了全局变量
console.log(scope);//变量存在,其值是 undefined
scope="local";//将变量初始化,并赋值
console.log(scope);//输出“local”
}

1.7  在函数内定义全局变量

//全局变量
function AllVary() {
n = 10 //表示全部变量,外部可访问
}
PartVary();
alert(n);//

错误的定义

//全局变量
function AllVary() {
var n = 10 //表示全部变量,外部可访问
}
PartVary();
alert(n);//error

1.8  作为属性的变量

待续。。。。

1.9  作用域链

待续。。。。

2  参考文献

【01】《JavaScript权威指南》(第六版)  (美)David.Flanagan

3  版权区

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
  • 可以转载该博客,但必须著名博客来源。

Javascript之变量作用域的更多相关文章

  1. [转]深入理解JavaScript的变量作用域

    1.JavaScript的作用域链 2.函数体内部,局部变量的优先级比同名的全局变量高. 3.JavaScript没有块级作用域. 4.函数中声明的变量在整个函数中都有定义. 5.未使用var关键字定 ...

  2. 深入理解JavaScript的变量作用域(转载Rain Man之作)

    在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...

  3. 深入理解JavaScript的变量作用域

    在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. ...

  4. JavaScript函数变量作用域

    变量作用域 在JavaScript中,用var申明的变量实际上是有作用域的. 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量. 如果两个不同的函数各自申明了同一变 ...

  5. javascript的变量作用域--对比js、php和c的for循环

    为什么要写这篇文章呢?主要是给自己提个醒,js的水很深,需要小心点儿才能趟过去,更何况自己不是专业人士,那就得更加小心了. 看下面的js代码: <!DOCTYPE html> <ht ...

  6. JavaScript 关于变量作用域的一道面试题

    ShineJaie 原创,转载请注明出处. 昨晚在一个交流群里看到有位网友提了一个他的面试题求助答疑.刚好我也有看到,就对这个问题思考了一下,觉得这道题对理解 JavaScript 作用域还是很有帮助 ...

  7. 浅谈javascript中变量作用域和内存(2)

    1.无块级作用域 javascript没有块级作用域,这会让其他程序员在理解js代码上很痛苦.在其他很多语言,比如C,大括号括起来的代码块都有自己的作用域 举个例子 if(true) { var na ...

  8. JavaScript的变量作用域

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 浅谈javascript的变量作用域

    1.变量遵循先声明再使用. console.log(b); b=123; 代码运行结果: Uncaught ReferenceError: b is not defined 2.方法内定义的局部变量外 ...

随机推荐

  1. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  2. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单

    系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...

  4. ASP.NET Core 中文文档 第五章 测试(5.2)集成测试

    原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...

  5. JS魔法堂:不完全国际化&本地化手册 之 理論篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...

  6. 【读书】PHP程序员要读的书目(不断完善中)

    本文地址 分享提纲: 1. PHP 2. Linux 3. Apache/Nginx 4. Mysql 5.设计模式/架构 6. 缓存并发 7. 其他语言 8. 代码基础 9. 大前端 10. 管理生 ...

  7. 关于CSS inline-block、BFC以及外边距合并的几个小问题

    CSS inline-block和BCF对于初学者来说,总是弄不太明白,下面记录下我在学习这块知识的过程中遇到的几个问题,供大家参考,有不足的地方,欢迎大家批评指正. 一.在什么场景下会出现外边距合并 ...

  8. iOS -- CocoaPods

    CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具.CocoaPods 的项目源码在 GitHub( https://github.com/CocoaP ...

  9. https 安全验证问题

    最近为了满足苹果的 https 要求, 经过努力终于写出了方法 验证 SSL 证书是否满足 ATS 要求 nscurl --ats-diagnostics --verbose https://你的域名 ...

  10. SQL Server事务、视图和索引

    废话不多说,直接上干货 14:13:23 事务 概括:事务是一种机制,一个操作序列,包含一组数据库操作命令,并且把所有的命令作为一个整体一起 向系统提交或撤销操作 请求. 事务的特性:   1.原子性 ...