javascript -- 变量

工作中发觉原生 js 还有待加强,只好再啃一遍高程3了。

ECMAScript的变量是松散类型的,所谓松散类型就是(变量)可以用来保存任意类型的数据。换句话说每个变量仅仅是在特定的时间内保存值的占位符而已。

所谓特定的时间就是变量的生命周期。

关于生命周期就要说到‘作用域’,进而得说‘作用域链’。此处只做简单介绍,后面会详细介绍作用域和作用域链。

js中没有块状作用域( if语句 ),只有全局作用域和函数作用域。

(var定义的变量将称为该作用域中的局部变量 即全局下就是全局变量,函数内就是局部变量)

全局作用域:在全局下有效(全局定义或函数内未定义只赋值的变量),即window下都可以使用。

函数作用域:只在函数体内有效,函数运行完函数、变量立即销毁,这也是无法在外面引用函数内的变量的原因。

定义:

var message;
var user;

定义了名为message user的变量,可以用来保存任何值。未初始化的会保存一个undefined

console.log(message);// undefined

函数退出后,变量销毁.

function test(){
var msg='hi'; // 局部变量
}
test();
console.log(msg);// 错误

函数体内未定义只赋值的变量是全局变量:

function test(){
 msg='hi';// 全局变量 不太推荐 因为在局部定义全局变量 难以维护
}
test();
console.log(msg);// 'hi'

变量提升(只是声明提升,赋值(初始化)没有提升):

function test(){
console.log(msg);
var msg='hi';
};
test();// undefined
console.log(msg);// msg is not defined
由此可以看出变量 msg 提升到了函数test()的顶部,初始化并没有提升,如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

【编程经验】宏定义

预处理命令可以改变程序设计环境,提高编程效率,它们并不是 C 语言本身的组成部分,不能直接对它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行...

3306
来自专栏搞前端的李蚊子

JS——判断一个对象是否为空

判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in...遍历属性,为真则为“非空数组”;否则为“空数组” ?  2.通过JSO...

4128
来自专栏Java帮帮-微信公众号-技术文章全总结

shell编程基础入门

shell编程基础入门 文章最后有下载shell学习指南电子书链接。 1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bi...

3314
来自专栏数据科学与人工智能

【Python环境】Python面试题汇总(二)

【 题目:031】 | 介绍一下except的用法和作用 try/except: 捕捉由PYTHON自身或写程序过程中引发的异常并恢复 e...

2605
来自专栏xiaoxi666的专栏

C++数据个数未知情况下的输入方法

我们经常需要输入一串数,而数据个数未知。这时候就不能以数据个数作为输入是否结束的判断标准了。

721
来自专栏LEo的网络日志

python技巧分享(十)

42613
来自专栏Brian

C语言心得一

C语言学习 ---- C语言是一个非常灵活且高效的语言,在学习的过程中总会有很多坑。最近有一个项目是混合编程,高性能部分采用C/C++来完成,数据处理和分析采用...

3166
来自专栏Astropeak

为什么不需要为Python对象添加 getter 和 setter

1222
来自专栏重庆的技术分享区

关于eslint使用规则,和各种报错对应规则。

ESLint 由 JavaScript 红宝书 作者 Nicholas C. Zakas 编写, 2013 年发布第一个版本。 NCZ 的初衷不是重复造一个轮子...

9477
来自专栏领域驱动设计DDD实战进阶

13-TypeScript单例模式

在JavaScript中,要实现设计模式比较复杂。而在TypeScript中因为使用面向对象的思想编程,要实现设计模式的方式与后端语言C#、Java等非常类似。...

2985

扫码关注云+社区