Javascript-函数(下)

重点:函数属性和方法、立即执行函数、this
一、函数属性和方法
1.length属性:代表函数定义时给出的实参个数。

2.prototype属性:指向一个对象的引用,这个对象称作“原型对象”。

3.call()方法和apply()方法
(1)含义:通过调用方法的形式来间接调用函数。例如,对象o调用函数f()

f.call(o);
f.apply(o);

(2)区别:

f.call(o,1,2);//call方法直接传入实参
f.apply(o,[1,2]);//apply方法将实参放入一个数组,实参位置传一个数组

4.bind()方法:将函数绑定至某个对象。当在函数 f() 上调用 bind() 方法并传入一个对象 o 作为参数,这个方法将返回一个新的函数。调用新的函数将会把原始的函数 f() 当做 o 的方法来调用。

function f(y){
    return this.x+y;
}
var o={x:1};
var g=f.bind(o);
g(2);//通过g(a)来调用o.f(a)=>3

5.toString()方法:返回一个字符串,和函数声明语句的语法相关。通常都返回函数的完整源码。

6.Function构造函数:函数还可以通过 Function() 构造函数来定义。注意,Function()构造函数所返回的函数使用的是全局作用域,即使在函数体内声明也不使用局部作用域。

var f=new Function("x","y","return x*y");//最后一个实参所表示的文本就是函数体

二、立即执行函数(IIFE)
1.含义:立即执行函数可以让你的函数在创建后立即执行,立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行。

2.形式:

//一种末尾小括号在外面
( function(){
    ...
} )()
//一种末尾小括号在里面
( function (){
    ...
} () )

3.优点

  • 不必为函数命名,避免了污染全局变量 ;
  • IIFE内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

4.运行原理
(1)一个简单的匿名函数

var f = function(){
 console.log("f");
}
f();//调用函数

(2)既然 f() 能够调用这个函数,那么把 f 替换成函数本身可以吗?

function(){
 console.log("f"); 
}();
//运行结果:Uncaught SyntaxError: Unexpected token (

产生这个错误的原因是,Javascript引擎看到function关键字之后,认为后面跟的是函数声明语句,不应该以圆括号结尾。解决方法就是让引擎知道,圆括号前面的部分不是函数定义语句,而是一个表达式。
(3)因此,这么写

(function(){
 console.log("f"); 
})();

(4)还可以,这么写

!function(){}();
+function(){}();
-function(){}();
~function(){}();

5.为什么JQuery插件都用立即执行函数的模式写?即,

(function($){
  ...//插件实现代码
})(jQuery);

这里把jquery当做参数传入该函数,那么在函数内部使用形参 这个限定符,你在这个函数内部可以随意折腾。


三、this
1.在一般函数方法中使用 this 指代全局对象

var x=1;
function test() {
    console.log(this.x);
}
test(); // =>1

2.作为对象方法调用,this 指代上级对象

var test={
    a:1,
    f:function(){
        console.log(this.a);
    }
}
test.f();//=>1

3.作为构造函数调用,this 指代new 出的对象

function Test(){
    this.x=1;
}
var eg=new Test();
console.log(eg.x);

4.apply 调用 ,apply方法的作用是改变函数的调用对象,此方法的第一个参数为改变后调用这个函数的对象,this指代第一个参数。

function test(){
    this.x=1;
}
var obj={y:2};
test.apply(obj);
console.log(obj.x);

——阅读《Javascript权威指南》第八章
——参考文章 https://www.jb51.net/article/127527.htm 立即执行函数
——参考文章 https://www.cnblogs.com/pabitel/p/5922511.html this的四种用法

猜你喜欢

转载自blog.csdn.net/sinat_38783046/article/details/82418821