<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" charset="UTF-8"> /** * 函数的3种创建方法 */ //1、语句式 function test(a,b){ return a+b; } console.log(test(1,2)); //2、直接量式 var test1 = function(a,b){ return a+b; } console.log(test1(3,4)); //3、构造函数式 var test2 = new Function('a','b','return a+b;'); console.log(test2(2,4)); /** * 三种方式的解析顺序 */ test3(); function test3(){ console.log('我是test3,语句式创建的'); } //test4(); //出错,因为test4只是被声明为全局变量,可是还没有赋值 var test4 = function(){ console.log('我是test4,直接量方式创建的'); } test4(); // test5(); //出错,因为test5只是被声明为全局变量,可是还没有赋值 var test5 = new Function("console.log('我是test5 ,构造函数式创建的')");//解析顺序和直接量方式一样(顺序解析) test5(); /** * 三种方式的效率 */ var d1 = new Date(); var t1 = d1.getTime(); for(var i=0;i<100000;i++){ // function test6(){;};// 语句式其次 // var test7 = function(){;};//直接量式最快 //var test8 = new Function();// 构造函数式最慢 } var d2 = new Date(); var t2 = d2.getTime(); console.log(t2-t1); /** * 三种方式的作用域 */ var k=1;//当这里的k注释掉时,构造函数式会报错找不到k function t1(){ var k=2; //function demo(){console.log(k);};// 2 //var demo = function(){console.log(k)};// 2 var demo = new Function('console.log(k)');// 1 构造函数式 定义的函数相当于全局,看不见函数内的k,(顶级作用域) demo(); } t1(); </script> </head> <body> </body> </html>
时间: 2024-10-18 23:06:53