现在这里声明一下,这里涉及到的内容只是ES6的学习笔记,一些看法想法,只是自己初学时的想法,如有错误或者不太合理的地方,希望大神多多指教.
Function类型
在JS中函数都是Function类型的实例,和其他引用类型一样具有属性和方法。函数名在我的理解实际上就是指向函数对象的指针。
// 在练习前,我先添加一个函数,方便之后的打印
Object.prototype.description = function()
{
console.log(this);
}
1.函数的声明
JS的变量声明具有hoisting机制,JS引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面。
// 说明了hoisting机制
sayHello();
// 函数的声明
function sayHello()
{
"Hello world!".description();
}
2.函数表达式
// 我的理解是 定义一个sayHello变量并用一个匿名函数初始化它。
var sayHello = function()
{
"Hello world!".description();
}
3.构造函数
var sum = new Function("numb1","numb2","return numb1 + numb2;");
sum(1,2).description();// 打印 [Number: 3]
4.函数立即执行
//函数立即执行的两种方法
(function(){"Hello, everybody!".description();})();
(function(){"Hello, everybody!".description();}());
5.关于函数的返回值
function func1(){
}
function func2(){
return 10;
}
(typeof func1()).description(); //[String: 'undefined']
(typeof func2()).description(); //[String: 'number']
接下来我们通过一些例子来熟悉一下闭包
// 闭包的第一种写法
function Circle1(r){
this.r = r;
}
Circle1.PI = 3.1415926
Circle1.prototype.area = function()
{
return Circle1.PI * this.r * this.r;
}
var c = new Circle1(10);
c.area().description(); //[Number: 314.15926]
// 写法二
var Circle2 = function()
{
var obj = new Object();
obj.PI = 3.1415926;
obj.area = function(r)
{
return this.PI * r * r;
}
return obj;
}
var c2 = new Circle2();
c2.area(10).description();//[Number: 314.15926]
// 写法三
var Circle3 = new Object();
Circle3.PI = 3.1415926;
Circle3.Area = function(r){
return this.PI * r * r;
}
Circle3.Area(10).description();//[Number: 314.15926]
// 第四种写法
var Circle4 = {
PI:3.1415926,
area:function(r){
return this.PI * r * r;
}
}
Circle4.area(10).description();//[Number: 314.15926]
// 第五种写法(这种方式不是很懂)
var Circle5 = new Function("this.PI = 3.1415926;this.area = function(r){return this.PI * r * r;}");
var c5 = new Circle5();
c5.area(10).description();//[Number: 314.15926]
一般常用 应该是二、四
简单介绍一下这个关键字 arguments
function doAdd()
{
if (arguments.length == 0)
{
return doAdd(0,0);
}else if(arguments.length == 1){
return doAdd(arguments[0],0);
}else{
return arguments[0] + arguments[1];
}
}
doAdd().description();
doAdd(1).description();
doAdd(1,2).description();
doAdd(1,2,3).description();