js系列-2 js函数相关
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js系列-2 js函数相关相关的知识,希望对你有一定的参考价值。
1,函数包含一组语句,用于指定对象的行为,函数也是对象,也称函数对象。函数对象连接到Function.prototype(该原型对象本身连接到Object.prototype)
每个函数都有一个prototype属性,它是一个对象,一个拥有constructor属性且值为该函数本身的一个对象。和对象的原型链不是一回事。
但是这个prototype将来会被多个该function的实例所继承(或者说该对象处于多个实例的原型链上);__proto__才是真正的原型链的实际指针,然而许多浏览器并不对外公开这个属性
function Foo(){}; var f1 = new Foo(); f1.__proto__===Foo.prototype //true Foo.__proto__===Function.prototype //true Function.prototype.__proto__===Object.prototype //true Object.__proto__===Function.prototype //true Object.prototype.__proto__ //null
2,函数创建包括函数字面量(包括函数声明与函数表达式)与new Function()(函数构造器)两种方式。
var a = 9; (function(){ var b = 0; Function(‘console.log("----"+a);console.log("----"+b);‘)(); })(); ----9 UncaughtReferenceError: b is not defined
一般的函数声明与表达式能访问到外函数的变量,但Function拿不到,这就是Function少使用的一个原因。
函数声明,函数表达式(立即执行函数表达式,匿名函数表达式,命名函数表达式),
(function(){ foo(); //在声明之前就进行了调用 function foo(){console.log("Hello"); } })(); -------Hello (function(){ foo(); var foo = function(){console.log("Hello"); } --匿名函数表达式 })(); Uncaught TypeError:undefined is not a function
看程序写结果:
myname ="global"; // 全局变量 function func() { alert(myname); var myname ="local"; alert(myname); } func();
函数声明会前置!变量声明也会前置。但变量前置声明为undefined
命名函数表达式。(应用于调试时调用栈) ----- 不常用
var foo=function too(){}
foo===too
IE6~8:false chrome/IE9 :too is undefined
三种函数创建方式的比较:
函数声明 | 函数表达式 | 函数构造器 | |
前置 | 会前置 | 不会前置 | 不会前置 |
允许匿名 | 不允许 | 允许 | 没有函数名 |
立即调用 | 不可以 | 可以 | 可以 |
在定义该函数的作用域通过函数名访问 | 可以 |
3, 一般无return 的话返回undefiend,如果作为构造器,无return或返回基本类型,则返回this。
4, 函数的调用与this:
A,方法调用模式:myObject.foo();
----this指向调用者对象上,
B,函数调用模式:foo();
----this指的全局对象
C,构造器调用模式
----使用new来调用构造器,将创建一个连接到该函数的prototype成员的新对象,同时this会被绑定到这个新对象上
D,Apply/call 调用
----this会作为第一个参数传入,如果传入null/undefined,方法中的this会指向全局对象,而在严格模式下,this就指向null/undefined。
了解ES5提供的bind方法:
functionf(){ returnthis.a; } Var g = f.bind({a:”hello”});
Console.log(g());
以上是关于js系列-2 js函数相关的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段