您的位置:首页 > Web前端 > JQuery

jquery函数基础

2018-01-20 19:21 253 查看
Jquery 函数基础:

定义函数的方法

function 语句 function f(x){return x;}

Function 构造函数var f = new Function(“x”,”return x;”);

函数直接量 var f = function(x){ return x;}

1、 构造函数

构造函数也是一类函数

在默认状态下,javascript 定义了很多构造函数,Date()Array() String()等等当然可以定义自己的构造函数。一般构造函数名称为大写字母开头,区别普通函数。

function ME(){
this.name= "";
this.age=12;
this.sayHi = function(){
return "hi"+ this.name
}
}


使用Function 构造函数 比使用function语句定义的函数的优点是可以动态的创建和编译一个函数。关于构造函数理解一下几点:

Function 构造函数允许JavaScript代码被动态的创建,在被运行时候编译。

Function构造函数 解析函数体,每次被调用的时候生成一个新的函数对象,如果出现在循环中或者经常被调用 效率会很低。

最后关于Function最重要的是他的岁用于并不是词法作用域,而是顶层作用域。

2、 函数直接量

直接量就是常量,函数直接量就是结构固定的函数体。(匿名函数)

function(a,b){
return a+b;
}


就可以当做表达式

var c = function(a,b){
return a+b;
}


其实我们可以把()当做执行函数的动作直接参与表达式运算

比如

function(a,b){
return a+b;
}(1,2);


使用函数

1、 生命周期

function语句声明的函数被预先编译,而是用函数直接量,或者Function定义的函数都是在运行时候才会被激活其生命周期。

2、 参数对象

为了方便管理实际参数,JavaScript 定义了Arguments对象,是一个伪数组,Arguments对象在实际开发中具有重要的价值,开发人员可以检测用户在调用参数时候所传递的参数是否符合要求。

3、 回调函数callee

Arguments对象包含一个callee属性,它能够返回当前Arguments对象所属的函数的引用,这相当于在函数体内调用函数自身,在匿名函数中比较有用。

4、 函数对象

JavaScript中函数是一类数据,使用Function 创建函数,那么该函数就继承了Function对象的所有方法和属性,,同时可以定义自己的方法和属性。

在开发中我们有这样的需求:定义一个函数,该函数体内有一个变量对着函数被调用而传递不同的值。使用 全局变量固然是一个方法,但是把这个变量命名为函数的属性,那么没次调用 可以拿到不同的值。

动态指针

this是一个动态指针,一个具有动态特性的指针。类似指针特性的标识符还有三个

calle是一个Arguments对象的一个静态指针,他始终指向参数集合所属的函数。

Prototype:函数包含的一个半静态指针,在默认情况下他始终指向函数附带的原型对象。不过可以改变这个指针,时期指向其他对象。

Constructor:对象包含的一个指针,始终指向创建该对象的构造函数

This的应用:

1、 函数的引用和函数的调用。



如图,是函数的直接调用和引用。

2、 call方法。



原型继承

a) 原型链

我们创建的每个函数都有一个prototype属性,这个属性是一个指针,一个对象。原型是JS的一个引用对象,所有的属性都会包含一个属性pojo来指向你的原型对象。

基础:

等级划分

我们认为JavaScript 中的任何值或者变量,但是对象可以分为以下等级

Object 是顶级公民,所有的对象都是通过它直接或者间接衍生的。

Function是一等公民,Array Math String Date Number Boolean 等内建对象是二等公民剩下的。

原型prototype

首先prototype是一个属性,同时是一个对象。拥有prototype属性的对象是函数,函数必定有prototype属性。

疑惑为什么拥有prototype属性的是函数?Object Math Array 中都有prototype属性,那么它是函数吗?是的,我们在定义一个对象或者数组时候,可以通过var a = new Object(); var a = new Array();但是 js中并没有类的概念,而是通过函数来实现的。其实上面的几种公民都是函数的一种,但是Math工具对象除外,你应该没见过 new Math()这种 写法吧!

proto和原型链

proto是一个指针,指向创建该对象的对象的prototype



当然,创建的普通的对象一般是以Object作为原型的比如如下:



现在可以解决这样一个问题:



解答:dog对象 是这样创建的 dog=function(){} 相当于 dog = new Function();这样dog.proto = Function.prototype;现在dog并没有 price属性,而他的原型链Function.proto对象也没有price属性,所以输出undefined.如果Function.prototype.price =1 这样你就会拿到这个值。Dity 是dog函数的实例 dity.proto = dog.prototype =animal 这样当dity.price被调用的时候,对调用到 animal中的price属性。

b) 疑惑:JS中确实为我们提供了基本数据类型:String Number Boolean 以及符合类型Object Function,但也和其他的面向对象的语言不太一样,没有类class.没有Map(ES6有)。但是我们可以通过Object +Function 来实现我们所有要求。

c) 关于prototype 的使用 的好处



观察上面的代码:

通过prototype 我们把sayHi 函数的定义放在了外边。这样有区别吗?答案是有。我们知道,new 其实就会申请一块内存空间,而由于js中方法是可以嵌套的,所以申请的内存空间肯定会更大。但是如果把 通过prototype来定义sayHi这样,new的时候 就不会有之前sayHi方法所占用的内存。有点类似java中的类中静态变量的概念。

d) 对闭包的理解。

一般来说闭包是具有封闭作用域的匿名函数。



JS函数能访问 参数、局部变量或者函数、外部变量(包括全局变量,外部函数或者变量)

那么JS函数中访问了 外部变量或者函数的函数那么 就是闭包。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息