这里介绍了几种函数的情况和函数的返回值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div></div> <script> // 首先,我们要明确一点:只要有函数就有返回值,哪怕你没有写上去 // 假如你没有写返回值,那么会出现两种情况: // 1.普通函数:默认返回值 undefined // 2.构造函数:默认返回值 this(new的情况) // 3.立即执行函数:它的返回值没有什么意义 // 假如我们写了返回值,同样有两种情况: // 1.普通函数:直接改变 // 2.构造函数:只有引用类型的才能改变返回值(new的情况) // 3.立即执行函数:毫无意义 // 普通函数 function a(){ } // 函数表达式 var b = function(){ } document.getElementsByTagName("div")[0].onclick = function(){ console.log(1) } // 如果你new了一个普通函数,那么这个普通函数就变成了构造函数,当然,他们本质上没有区别 // 有个默认的规范问题就是,如果你要将一个函数当做构造函数使用,在写名称时大写以示区分或者标记 function C(){ } // 如果你不new C,那么C就是一个普通函数 var c = new C(); // 立即执行函数 / 匿名函数 可以传参,也可以不传,方式和普通函数一样 // 执行完毕,立即销毁 // (function(i){ // })(i); // (function(i){ // }(i)); // 打印立即执行函数的返回值,箭头函数的返回值也只能打印,或者用于回调函数中,当然,立即执行函数也可以 // console.log((function(){ // return 1; // })()) // 接下来,来看看返回值的类型吧 // function e(){ // } // console.log(e())// undefined // function f(){ // return 0; // } // console.log(f())// 0 // function g(){ // return [] // } // console.log(g())// [] // 默认返回this // function h(){ // } // var i = new h(); // console.log(i)// h{} // 基本数据类型不能改变它的返回值 // function j(){ // return 0; // } // var k = new j(); // console.log(k)// j{} // 引用数据类型可以改变它的返回值 // function l(){ // return function(){ // } // } // var m = new l(); // console.log(m);//function(){} // undefined 和 null 一样改变不了 // function n(){ // return undefined; // } // console.log(new n())// n{} // function o(){ // return null; // } // console.log(new o())// o{} </script> </body> </html>