js中关于function两种声明的区别——预解析
来源:互联网 发布:星桥数据 编辑:程序博客网 时间:2024/05/20 08:27
本文转自(摘要):让我印象深刻的javascript面试题
总结:
//函数表达式,和变量声明同等
var a=function(){alert(10)
}
//函数声明,优于变量声明
function a(){
alert(10)
}
————————————————————————————————————————————————————————————————
例子:
alert(a)
a();
var a=3;
function a(){
alert(10)
}
alert(a)
a=6;
a();
------------分割线------------------
alert(a)
a();
var a=3;
var a=function(){
alert(10)
}
alert(a)
a=6;
a();
考点其实就两个,第一变量声明提前,第二函数声明优先于变量声明!
下面我简单分析一下,
第一部分运行结果:
1.函数声明优先于变量声明,所以,刚开始,a就是function a(){alert(10)} ,就会看到这个函数。
2.a(),执行函数,就是出现alert(10)
3.执行了var a=3; 所以alert(a)就是显示3
4.由于a不是一个函数了,所以往下在执行到a()的时候, 报错。
第二部分运行结果:
1.underfind
2.报错
在之前说过,预解析是把带有var和function关键字的事先声明,但不会赋值。所以一开始是underfind,然后报错是因为执行到a()的时候,a并不是一个函数。
————————————————————————————————————————————————————————————————————————
预解析和作用域:
var a=0;
function aa(){
alert(a)
a=3
}
//结果是什么都没发生,因为要执行aa函数才会执行alert(0)
------------分割线1------------------
var a=0;
function aa(){
alert(a)
var a=3
}
aa();
//underfind 在aa函数里面,有var a=3,那么在aa作用域里面,就是把a这个变量声明提前,但是不会赋值,所以是underfind
------------分割线2------------------
var a=0;
function aa(a){
alert(a)
var a=3
}
aa(5)
alert(a)
//5,0 在函数体内,参数a的优先级高于变量a
------------分割线3------------------
var a=0;
function aa(a){
alert(a)
a=3
}
aa(5)
alert(a)
//5,0 在函数体内,执行alert(a)和a=3,修改的的并不是全局变量a,而是参数a
------------分割线4------------------
var a=0;
function aa(a){
alert(a)
var a=3
alert(a)
}
aa(5)
//5,3
//这个我也有点不理解,请教网上的说法,有两个答案(小伙伴如果知道怎么理解,欢迎在评论上指点)
//1.参数优先级高于变量声明,所以 变量n的声明其实被忽略了,此时相当于
//var a=0;
//function aa(a){
// var a=5;
// alert(a)
// a=3
// alert(a)
//}
//aa(5)
//2.形参和局部变量优先级一样,此时相当于
//var a=0;
//function aa(a){
// var a; 先声明
// a=5 由于形参和变量名称一样,覆盖了!
// alert(a)
// a=3
// alert(a)
//}
//aa(5)
------------分割线5------------------
var a=0;
function aa(a){
alert(a)
a=3
alert(a)
}
aa()
alert(a)
//underfind 3 0
//首先,参数优先级高于全局变量,由于没传参数,所以是underfind
//a=3,实际上修改的时形参a的值,并不是全局变量a,往下alert(a)也是形参a
//最后的alert(a),你懂的
- js中关于function两种声明的区别——预解析
- JS两种function声明的区别
- js中 var a = function(){} 与function b(){}两种函数声明的区别
- 关于JavaScript中function的两种创建方式的解析
- js中,(function(){})()的用法解析
- Javascript 两种 function 定义的区别
- JSP两种声明变量的区别
- JSP两种声明变量的区别
- JSP两种声明变量的区别
- JSP两种声明变量的区别
- Jsp中的两种声明的区别
- JSP两种声明变量的区别
- JSP两种声明变量的区别
- JSP两种声明变量的区别
- JavaScript两种函数声明的区别
- js中onload和$(function(){})的区别
- zend中function的声明
- 解析JS中实现打印的两种方式
- IOS设计模式----对象池模式OBJC版
- zookeeper安装
- JMeter学习-017-java.net.SocketException: Permission denied: connect 解决方案
- stm32 usb lib v2.2.0 越界bug解决办法
- 性能测试TPS目标值确定-二八原则
- js中关于function两种声明的区别——预解析
- 如何利用新媒体做SEO推广?
- RecyclerView 条目单选----单选时改变文本的背景框形状(seletor)
- 网站图标制作
- nginx下开启gzip和chunked
- [生成函数][NTT][多项式求逆]BZOJ 3456: 城市规划
- 卡方检验概述
- Nginx,Apache安装配置
- BZOJ1081 超级格雷码 [找规律]