声明变量
变量:变量是存储信息的容器,创建变量通常称为“声明”变量
变量必须以字母开头(小驼峰式myName);
变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做);
变量名称对大小写敏感(y 和 Y 是不同的变量);
var x;//变量声明之后,该变量是空的(它没有值underfined)。
var x=2;
var x=2,y=3;
var x,y;
x=2//全局
var myName;
重新声明 JavaScript 变量,该变量的值不会丢失
var carname="Volvo";
var carname; //变量 carname 的值依然是 "Volvo":
var carname="Volvo";
var carname="Volvo1";//覆盖Volvo1
只有声明被提升,而赋值或其他运算会留在原地
console.log(a);//underfined
var carname='Volvo';
解释器编辑:
var a;
console.log(a);
a='hello world';
删除变量
情景1:
var str="aa";
delete str ;
console.log(str)//aa
情景2:
str ="aa";
delete str ;
console.log(str)//str is not defined 未定义;
可以直接设置undefined就可以了:
var str="dd";
str=undefined;
console.log(str)
javascript的变量是无类型的(untype);
用var声明的变量是永久性的。所以当你试图用delete来删除其声明的变量时会报错。
函数定义
方式1:函数声明;(不属于任何对象,默认全局对象)
function MyFunction(){
return this;//默认返回,this 指向全局windows
}
MyFunction();不调用不执行,函数预编译;
方式2:函数表达式;(存储在变量中)
var myFunction=function(){};
myFunction();//先定义,后调用;
两者的区别:
解析器会先读取函数声明,并使其在执行任何代码之前可以访问;
而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行。
方式3:构造函数;
var myFunction = new Function("a", "b", "return a * b");
等同 var myFunction = function (a, b) {return a * b}
函数构造法参数必须加引号,一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。
var name='haoxl';
function fun(){
var name='lili';
return new Function('return name');//不能获取局部变量
}
console.log(fun()());//haoxl
Function()构造函数每次执行时都会解析函数主体,并创建一个新的函数对象,所以当在一个循环或频繁执行的函数中调用Function()构造函数效率是非常低的。而函数字面量却不是每次遇到都会重新编译的,用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。
方式4:自调用函数(自执行)
(function(n1,n2){
console.log (n1+n2); //独立作用域
})(1,3);//4
自执行函数 主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,且立即自动执行