JavaScript之函数

 1.函数声明

  函数体执行到return结束 没写return 执行到}结束 return 后面不写代码

格式:

function fn(形式参数){

    形式参数接受实际参数

}

函数调用 函数名()

fn(实际参数)

function add(a,b){
	console.log(a+b);
	// 函数内部不写返回值 返回undefined 
	return a + b
	// 一般情况下 写在return后面代码不生效  变量提升
	// var c = 10;
	// console.log(a + b );
}
var result = add(1,2);
console.log(result);

  函数表达式 匿名函数赋值给一个变量

var sum = function(a,b){
	console.log(a+b);
}
sum(1,2,3,4,5)

2.函数提升

函数会提升到当前作用域得最顶部 var声明变量会提升到当前作用域顶部

foo();
function foo(){
	console.log('我是一个函数');
}
var foo = 'hello function';
console.log(foo);

3.auguments

auguments 属性 专门用来保存实际参数列表得类数组对象

arguments内部属性 callee  仅当当前相关函数正在执行才可用

function fn(a,b){
	console.log(a,b);
	console.log(arguments.length);
	console.log(arguments[3]); 
	console.log(arguments.callee,'arguments得属性')
	console.log(arguments.callee === fn)

4.this 

this 是函数赖以执行得环境对象

(1)关注this被谁拥有  (2)关注拥有this方法被谁调用  this就指向谁

1.单独使用this  this在nodejs指向当前模块 this在浏览器指向全局对象window

2.函数内部使用this  this指向全局对象 global window

3.方法中使用this  this指向拥有该方法得调用者

4.在事件中使用this  this指向接收事件得元素

5.显示函数绑定时,可以更改this指向

name = 'larry';
var obj = {
	name:'terry',
	sayName:function(){
		console.log(this);
		console.log(this===obj);
		console.log(this===globalThis);
		console.log(this.name);
	}
}

obj.sayName();//this -->obj对象 this===obj true this.name--->terry 

var x = obj.sayName;
x();//this --global this===obj false this===globalThis true 


var obj1 = {
	name:'terry'
}
var obj2 = {
	sayName:function(){
		console.log(this.name,this)
	}
}
// call 方法修改this指向  参数:this执行得环境对象 
obj2.sayName.call(obj1);

 5.IIFE

 立即执行函数  声明得时候就调用

 特点:1.页面加载得时候会立即执行一次

          2.拥有局部作用域 变量不会泄露

格式:立即执行函数 (匿名函数(形式参数){})(实际参数)

var i = 0;
for(;i<6;i++){
	function foo(){
		console.log(i)
	}
}
foo();//6

for(var i = 0;i<6;i++){
	(function(j){
		console.log(j)
	})(i);//0 1 2 3 4 5
}


var arr = [];
// 循环遍历 往数组添加元素 
for(var i=0;i<5;i++){
	// 闭包 函数内部使用函数外部变量  解决作用域问题
	arr[i] = (function(j){
		return function(){
			console.log(j)
		}
	})(i);// 0 1 2 3 4 
}
arr[4]();

6.作用域 

块级作用域 if(){} for(){}

例如:

if(true){
	let a = 10;
};
console.log(a)

函数内作用域 (局部作用域) 函数内部得变量函数外部是无法获取 不适用var声明得变量也是全局变量 a = 10;函数外得作用域 (全局作用域) 函数内部可以获取函数外部得变量

var v1 = 10;
v2 = 20;
function foo(){
	var a = 30;
	b = 30;
	console.log(v1,v2);
}
foo();
console.log(a,b)

7.作用域链

作用域链:自由变量沿着作用域追层向上寻找的过程构成了作用域链

自由变量:当前作用域中本身没有这个变量,但是想要获取到该变量对应的值

var a = 10;
function foo(){
	var b = 20;
	function fn(){
		var c = 30;
		console.log(a);
		console.log(b);
		console.log(c);
		console.log(d);
	}
	fn()
}
foo();

var a = 10;

function fn() {

  var b = 20;

  function bar() {

    console.log(a + b)

  }

  return bar

}

var x = fn();

b = 200;

x();

8.函数调用(修改this指向)

1.如何修改函数this指向?

    * 1.call(执行环境对象,实参列表)

    * 2.apply(执行环境对象,[实参列表])

    * 3.bind(执行环境对象,实际参数)(实际参数)

2.函数调用得方式

 *  1.函数名()

 *  2.call();

 *  3.apply()

 *  4.bind()()

var obj = {
	name:'terry',
	sayName:function(){
		console.log(this,this.name)
	}
}
var obj1 = {
	name:"larry",
	sayName:function(a,b){
		console.log(this.name,a,b)
	}
}
obj1.sayName.bind(obj)(1,2);
obj.sayName();
obj1.sayName();
1.修改this指向  call()
obj1.sayName.call(obj,1,2);
2.修改this指向  apply()
obj1.sayName.apply(obj,[1,2]);
3.修改this指向 bind()() bind()返回当前函数本身 bind()()调用函数
console.log(obj1.sayName.bind(obj,1,2));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值