关于Javascript中声明变量、函数的笔记
一、概念
1、变量声明
在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值):
var a=1,b,c; //关键字显式声明变量a,b,c,并给a赋值
console.log(a); //1 //由于b,c已声明但未赋值,因此输出"undefined"
console.log(b); //undefined
console.log(c); //undefined //如果变量未声明,则输出未声明的报错信息
console.log(d); //Uncaught ReferenceError: d is not defined(…)
2、函数声明
在JavaScript中,函数一般直接通过关键字function进行声明(匿名函数除外)。如下通过function关键字声明一个a函数(或直接var声明一个变量a再赋值为一个函数,此时为函数表达式,但是两种方式都是声明的a最终得到的都是一个函数):
function a(){
//.......
}
console.log(a); //function a(){ //...... } 函数声明
var a = function(){
//......
}
console.log(a); //函数表达式
二、区别
在JavaScript的执行机制中(预编译阶段),变量声明和函数声明是存在优先级的,函数声明的优先级大于变量声明。若同时声明一个函数和变量,函数名称和变量名称相同,则声明的变量无效,通过typeof我们可以看到,无论声明先后顺序,如果声明同名的函数和变量,则只有声明的函数有效,而声明的变量无效(相当于同名的函数覆盖了变量)。也就是:对于var声明的变量如果未赋值,则function定义的重名变量会覆盖掉var的声明;而当var声明的变量已被赋值,则function定义的重名变量无效。如下代码所示:
var a;
function a() {
alert("哈哈!")
}
console.log(a); //显示function函数定义
//声明顺序调过来也是一样的结果
function a() {
alert("哈哈!")
}
var a;
console.log(a); // 显示function函数定义
//如果在上述情况下(javascript预编译阶段),直接给变量a赋值,则有以下结果(函数声明无效),声明顺序调过来也一样结果
function a() {
alert("哈哈!");
}
var a = 1;
alert(typeof a); //number,这是因为这时候javascript进入了代码解释执行阶段。变量a被赋值了数值1,所以输出为number类型
console.log(a); //1
原因:JavaScript的执行环境上下文相关。预编译阶段只有所有变量声明提前,执行阶段赋值表达式执行,导致重名声明失效,以执行结果为当前变量值。
三、参考资料
关于Javascript中声明变量、函数的笔记的更多相关文章
- 在javascript中关于变量与函数的提升
在javascript中关于变量与函数的提升 一.简介 在javascript中声明变量与函数的执行步骤: 1.先预解析变量或函数声明代码,会把用var声明的变量或者函数声明的代码块进行提升操作 2. ...
- JavaScript 中对变量和函数声明提前的演示样例
如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...
- JavaScript 中定义变量时有无var声明的区别
关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...
- 函数中声明变量不用Var的情况
我们都知道函数中声明变量不用Var时这个变量会成为全局变量,但是并不是函数一开始执行就会把它变为全局变量,必须执行到这条语句. 看一段代码 function f(){ alert(a); ...
- (转载)JavaScript中定义变量
(转载)http://blog.163.com/xuxiaoqianhz@126/blog/static/165190577201061594421870/ JavaScript中定义变量有两种方式: ...
- 在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别
今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...
- JavaScript 中的回调函数
原文:http://javascriptissexy.com/ 翻译:http://blog.csdn.net/luoweifu/article/details/41466537 [建议阅读原文,以下 ...
- JavaScript学习系列2一JavaScript中的变量作用域
在写这篇文章之前,再次提醒一下 JavaScript 是大小写敏感的语言 // 'test', 'Test', 'TeSt' , 'TEST' 是4个不同的变量名 JavaScript中的变量,最重要 ...
- JavaScript中的普通函数和箭头函数
最近被问到了一个问题: javaScript 中的箭头函数 ( => ) 和普通函数 ( function ) 有什么区别? 我当时想的就是:这个问题很简单啊~(flag),然后做出了错误的回答 ...
随机推荐
- 某考试 T3 bitboard
bitboardDiscription 天才发明家小K 制造了一块比特板.板子上有2^n个比特元,编号为0 ∼ 2^n−1.每个比特元
- Oracle SOA Suit Adapter
SOA架构的一个核心的使命是整合企业现存的各式各样的计算资源,它不仅仅是代码层面的整合,更是硬件,计算能力,服务能力的整合.Oracle SOA Suite在这方面做得特别的贴切,它提供了一组Adap ...
- 【postman】postman测试API报错如下:TypeError: Failed to execute 'fetch' on 'Window': Invalid value 对中文支持不好
使用postman测试APi的时候,因为系统需要在header部带上登录用户的信息,所以 如下: 然后测试报错如下:TypeError: Failed to execute 'fetch' on 'W ...
- 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现
权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现 import java.math.BigInteger; import java.util.ArrayLi ...
- js利用offsetWidth和clientWidth来计算滚动条的宽度
原文: http://www.haorooms.com/post/js_scroll_width 参考: https://www.cnblogs.com/benxiaohai-microcosm/p/ ...
- 百科知识 DCR文件如何打开
使用IE可以打开,但是需要先安装Adobe Shockwave Player 天空软件下载地址:http://fpdownload.macromedia.com/get/shockwave/defau ...
- css3 - 动态伪类
动态伪类分为以下几种: 1. hover(经过) 2. active(点击后) 3. focus(聚焦) - input专用 4. visited(访问后) 使用:
- FFmpeg for ios架构:中级
FFmpeg这部分想了非常久,也没找到比較好的解说方式.本来想像其他博客一样.对着代码一行行的分析.但后来感觉不太现实,FFmpeg应用在IOS上怎么说代码最少也有个5.6k行(包含音视频.业务逻辑) ...
- windows平台是上的sublime编辑远程linux平台上的文件
sublime是个跨平台的强大的代码编辑工具,不多说. 想使用sublime完毕linux平台下django网站的代码编辑工作以提高效率(原来使用linux下的vim效率较低,适合编辑一些小脚本). ...
- C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 C# 文件压缩加解密
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩 这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http:// ...