Javascript函数和函数表达式

javacript是对象语言,没有类,function是一个对象,可以声明和作为表达式来用:

作为声明:

function func(){console.log("hello")}

作为表达式:

//具名表达式
var a = function func(){ console.log("hello world")};

//将function赋值给a ,function为匿名表达式
var a = function(){ console.log("hello")};

//直接执行表达式,function语句需要用括号括起来
(function(){ console.log("hello world") })();

//直接执行表达式,带参数
(function(a,b){ console.log(a+b)})(1,2); //return 3;

函数声明和函数表达式的区别:

alert(foo); // function foo() {}
alert(bar); // undefined
function foo() {}
var bar = function bar_fn() {};
alert(foo); // function foo() {}
alert(bar); // function bar_fn() {}

JavaScript 引擎执行以上代码的顺序可能是这样的:

创建变量 foo 和 bar,并将它们都赋值为 undefined。 创建函数 foo 的函数体,并将其赋值给变量 foo。 执行前面的两个 alert。 创建函数 bar_fn,并将其赋值给 bar。 执行后面的两个 alert。

对象字面量

var person = { name:"hello",age: 20, sayhi: function(name){ console.log( name )}}

函数作为对象参数传递

function func(test){
	test();
}

function test(){ console.log("hello") }

func(test); //return hello;

function test2(name){ console.log(name) }

function func2(data,test2){
	test2(data);
}

func2("hello", test2);

函数作为构造函数

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

var aa =new a();

var bb =new function(){console.log("bb");}
这里相当于
var bb = new 匿名类(){console.log("bb");}

所以函数这样都是可以的

var c  = function(){
			console.log("cc");
		}

		c();

		var b = new c();

		console.log(b); //会先执行c函数,然后将值赋值给b,这里b将会输出c的对象字面量字符串
punkmonday /
Published under (CC) BY-NC-SA in categories java  tagged with javascript