【JS小知识】调用匿名函数、作用域、变量的声明提前

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函数");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值