JS调用匿名函数
立即执行的函数往往只会执行一次,在匿名函数中务必要将整个函数用括号包裹起来,并且,用要在后面添加括号才能执行;
(function(){
console.log("匿名函数运行")
})();
*对象的属性值可以使任何的数据类型,也可以是个函数
var obj = new Object();
obj.name = "sun";
obj.age = 18;
obj.sayName = function(){
console.log(obj.name);
}
obj.sayName();
* 函数也可以称为对象的属性
* 如果一个函数作为对象的属性保存
* 那么我们称这个函数是这个对象的方法
* 调用这个函数就说调用对象的方法
* 但是他只是名称上的区别,依旧是个函数
var obj2 = {
name:"zhu",
age:28,
sayName:function(){
console.log(obj2.name);
}
}
obj2.sayName();
* 枚举对象中的属性
var obj3 = {
name:"zhang",
age:18,
gender:"nan",
address:"花果山"
}
for(var n in obj3){
console.log("属性名"+n);
console.log("属性值"+obj3[n]); // obj3[n] 指代 obj3.n 固定用法
}
* 作用域
* 作用域指一个变量的作用的范围
*1、 全局作用域
* - 直接编写在script标签中的代码,都在全局作用域
* - 全局作用域在页面打开时创建,在页面关闭时销毁
* - 在全局作用域中有一个全局对象window
* 它代表的是一个浏览器的窗口,它由浏览器创建,我们可以直接使用
* - 在全局作用域中,
* 创建的变量都会作为window对象的属性保存
* var a = 10 <====> window.a = 10
* 创建的函数都会作为window对象的方法保存
* - 全局作用域中的变量都是全局变量
* 在页面的任意部分都可以访问
*2、函数作用域
* - 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
* - 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的
* - 在函数作用域中可以访问到全局的作用域的变量,反之不可
* - 当在函数作用域中操作一个变量时,它会先在自身作用域中寻找var关键字,
* 如果有就直接使用,
* 如果没有,就向上一级作用域中寻找,直到找到全局作用域
* 如果全局作用域没有,则会报错
* 在函数中,不使用var声明的变量都会成为全局变量
function fun(){
var a = 123;
}
// 三个函数作用域
fun();
fun();
fun();
var b = 123;
function fun2(){
var b = 12;
console.log(" b = " + b);
// 若是想跳过函数作用域中的b,直接访问全局作用域中的b,则使用window.b
console.log("b=" + window.b);
}
fun2();
var c = 33;
function fun3(){
console.log("c=" + c); // 会输出 c= undefined ,是因为var存在,直接找函数作用域中的c,而此时c未被声明
var c = 66;
// c = 66; //若去掉var关键字,则会输出66
}
fun3();
* 变量的声明提前
* 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值)
* 但是如果声明变量时不使用var关键字,则变量不会被声明提前
* 函数的声明提前
* 使用函数声明形式创建的函数function 函数名(){}
* 它会在所有代码执行之前就被创建,所以我们可以在函数声明之前来调用函数
// fun()为函数声明创建的函数,因此在哪里引用都可以
// 函数声明,会被提前创建
function fun(){
console.log("我是一个fun函数");
}
// 引用fun2();时必须在其下方,因为他是变量创建的函数
// 函数表达式,不会被提前创建
var fun2 = function(){
console.log("我是fun2函数");
}