概述
1、var定义变量、函数
1、console.log(a)
//undefined 而不是 is not defined
只有var定义的变量会提升,let const没有。
var a=3;
相当于:
var a;
//undefined
a=3;
alert(g); //
g is not defined
说明全局没有定义这个变量。就直接打印
console.log( demo)
//
下面定义变量
undefined
var demo=function(){
相当于:var demo;
demo=function(){}
2、函数声明: function 函数名(){
//代码块 }
//有提升
console.log(fun);
//function fun(){}
console.log(JSON.stringify(fun));
// undefined
console.log(typeof(fun));
// function
判断是什么数据类型
function fun(){
}
3、函数表达式:
var 变量=function(){
//代码块
}
//不会提升,代码解析到了就执行。
console.log(fun)
//undefined
var fun=function(){
}
4、函数声明与定义变量都是同一个名字相同哪个会优先
console.log(typeof(fun));
//function
是函数类型
var fun=30;
console.log(typeof(fun))
//number
是数字类型
function fun(){
}
console.log(typeof(fun))
// number
数字类型
-------------------------------------------------------------------------------------
console.log(typeof(fun))
//function
function fun(){
}
console.log( typeof(fun))
//
function
var fun=30;
console.log(typeof(fun))
//
number
综上结果:函数声明提升优先于定义变量提升。
例子:
num=30
function fun(){
window.num=20;
console.log(num);
//undefined
因为下面定义的num是提升了。所以是undefined
var num;
console.log(window.num)
//20
}
fun();
5、当函数声明与函数表达式同一个名字时候
var ledi;
function ledi(){
alert('1');
};
ledi();
// 1
var ledi = function (){
alert('22');
};
ledi();
//22
讲解:函数声明有提升,并且函数声明覆盖变量声明,但不会覆盖其值,先执行声明的函数,之后表达式覆盖声明的,所以最后执行表达式的函数。
6、变量,形参同名同时出现时
var num1 = 1;
function
fn(num3){
console.log(num1);
console.log(num3);
console.log(num4);
console.log(num2);
var num1 = num4 = 2;
//这种写法表示:最前面一个是局部变量,后面的都是全局变量。num1、num4的值都是4
num2 = 3;
var num3= 5;
}
fn(4);
声明变量num1和函数fn,函数fn中也要进行预编译,定义变量num1和num3。
1.console.log(num1);
这时候num1虽然定义了但还没赋值,所以输出undefined
2.console.log(num3);
这时候num3定义了也没赋值,但是参数传了4进来,执行顺序是参数>变量,所以输出4
但要注意,如果var num3= 5;这句话在console.log(num3);前面,即使参数传进来,依然输出变量的值即5
3.console.log(num4);
连续赋值操作,除了第一个变量以外的变量都被视为全局变量处理,但是因为全局变量没有定义,所以报错"num4 is not defined"
如果num4=2;这句话在console.log(num4);前面了,那就输出2
4.console.log(num2);
全局变量同理,报错"num2 is not defined"
7、变量声明、函数声明、形参同时出现
function aa(a,b,c){
function a(){}
console.log(a);
console.log(aa);
console.log(arguments);
var a="ee";
var aa="444";
arguments=6;
console.log(a);
console.log(aa);
console.log(arguments);
}
aa(1,2,3)
1.console.log(a);
变量a声明了但未赋值,被同名形参覆盖,此时a为1,但是又被同名函数覆盖,所以输出function a(){}
2.console.log(aa);
变量aa声明了但未赋值,所以输出undefined
3.console.log(arguments);
传了参数1,2,3进来,本来输出[1,2,3],但是同名函数a覆盖了参数,所以输出[a(),2,3]
后三句因为重新赋值,所以相继输出
ee
444
6
8、自执行函数声明
(function d(num){
console.log(num);
//100
参数优先级大于定义变量
var num=10;
}(100))
(function fn(num){
console.log(num); //function num(){}
函数声明优先级大于参数变量
var num=10;
function num(){};
}(100))
(function fn2(num){
function num(){};
console.log(num); //function num(){}
var num=10;
console.log(num); //10
}(100))
9、function m(){
console.log(a1); //undefined
console.log(a2); //undefined
console.log(b1); //undefined
console.log(b2); //undefined
if(false){ //不弹出s提示
alert("s");
function b1(){}
var a1=10;
}
if(true){
alert("2"); //弹出了2
function b2(){}
var a2=10;
}
console.log(a1); //undefined
console.log(a2); //10
console.log(b1); //undefined
console.log(b2); //function b2(){}
}
m();
2、let、const定义函数变量(都是块级作用域)
const:与let差不多,用来声明恒定的变量即常量,而且声明的时候必须要赋值否则会报错
const PI;
//报错
正确写法:
const PI=3.14
PI=3.14;
console.log(PI)
console.log(PI)
let 的使用:
1、let 声明的变量只能处于块级作用域有效,不能声明多个一样的变量。
2、let没有变量提升,而是暂时性死区特性。
var a=3;
function
fun()(
console.log(1)
//1
console.log(a)
//暂时性死区
提示:a is not defined
console.log(2)
//不会执行
let a=2;
//不会执行
)
fun();
解决一些问题
for(var i=0;i<2;i++){
console.log(i)
// 0,1
}
console.log(i)
//2
var
arr=[];
for(var i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0]()
//2
arr[1]()
//2
----------------------------------改成let定义后
var
arr=[];
for(let i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0]()
//0
arr[1]()
//1
--------------------------------------------
var a=12;
function fun(){
console.log("值呢:"+a);
//undefined
return 4;
console.log(1);
//不会执行
var a=45; //不会执行
}
fun()
----------------------------------------------
var z=3;
//全局作用域
function x(){
var z=4;
//局部作用域
function s(){
console.log(z);
//4
}
s();
}
x();
console.log(z);
//3
-------------------------------------
var a=12;
function fun(){
console.log("值呢:"+a);
//undefined
return 4;
//return 后面代码不执行
console.log(23)
//不执行
var a=45;
//定义的变量会提升
}
fun()
最后
以上就是任性板凳为你收集整理的var、let、const、函数、定义变量使用的全部内容,希望文章能够帮你解决var、let、const、函数、定义变量使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复