Javascript学习笔记:3种定义函数的方式

①使用函数声明语法定义函数

1 function sum(num1,num2){
2   return num1+num2;
3 }

②使用函数表达式定义函数

1 var sum=function(num1,num2){
2   return num1+num2;
3 }

③使用Function构造函数定义函数

1 var sum=new Function(‘num1‘,‘num2‘,‘return num1+num2‘);

三种定义函数的方式,其中第二和第三种从技术角度讲都属于函数表达式的方式,但是不推荐使用第三种即使用Function构造函数的方式,因为这种方式性能低于前两种方式。不管以哪种方式定义函数,函数都是Function类型的实例,而且都与其他引用类型一样拥有属性和方法。这三种定义函数的方式唯一不等价的地方是:第二种和第三种方式定义的函数不存在函数声明提升,第一种方式定义的函数存在函数声明提升(所谓函数声明提升,也就是解析器在向执行环境中加载数据时,会率先读取函数声明,并使其在任何代码之前可以访问),其他方面都是等价的。

1 sum(1,2);//3
2
3 function sum(num1,num2){
4  return num1+num2;
5 }

使用函数声明语法定义函数的方式存在函数声明提升,所以sum函数可以正常执行。

1 sum(1,2);//TypeError: sum is not a function
2
3 var sum=function(num1,num2){
4   return num1+num2;
5 }

使用函数表达式定义行数的方式不存在函数声明提升,所以会报出异常。

1 sum(1,2);//TypeError:sum is not a function
2
3 var sum=new Function(‘num1‘,‘num2‘,‘return num1+num2‘);

使用Function构造函数定义函数的方式不存在函数声明提升,所以会报出异常。

时间: 2024-08-01 10:44:14

Javascript学习笔记:3种定义函数的方式的相关文章

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

JavaScript学习笔记(一)函数

function myFunc(theObject) { theObject.make = "Toyota"; } var mycar = {make: "Honda", model: "Accord", year: 1998}, var x, y; x = mycar.make; // x获取的值为 "Honda" myFunc(mycar); y = mycar.make; // y获取的值为 "Toyota&q

JavaScript学习笔记(八)--- 函数表达式

1.递归 实现一: function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } alert(factorial(4)); //24 但给factorial重赋值时,再调用就会出错. var anotherFactorial = factorial; factorial = null; alert(anotherFactorial(4)); //TypeError: factorial

函数 两种定义函数的方式

函数声明 function foo () {} 函数表达式 var foo = function () {} (function() {})() var foo = function bar() {} return function () {} 函数声明会被提前 var sum = add(1,2); // 3 console.log(sum); function add(x, y) { x = +x; y = +y; if(isNaN(x) || isNaN(y)) { return; } r

javascript学习笔记——语句

语句就是javascript整句和命令. 表达式语句: count++;    alert(123);    a = 100;  ....... 复合语句和空语句: 复合语句就是用逗号将多个语句连在一起形成复合语句.{x=1;y=2;alert(x);alert(y)} ps:在javscript中没有块级作用域,只有函数作用域. 空语句包含0条语句,在部分时候也是有用的. 如for(var i = 0; i < 3 ; a[i++] =0);在这里最后是一个分号,会执行for循环括号里面的语句

js两种定义函数、继承方式及区别

一:js两种定义函数的方式及区别 1:函数声明: function sayA() { alert("i am A"); } 2:函数表达式: var sayB = function() { alert("i am B"); } 区别:code 前者会在代码执行之前提前加载到作用域中,后者则是在代码执行到那一行的时候才会有定义 二:js两种继承方式及区别 对象冒充 临时属性 call() apply() 原型链 code 继承应选哪种 code 三:实例 js两种定义

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个

JavaScript学习12 JS中定义对象的几种方式

JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript"> var object = new Object(); object.name

JavaScript学习笔记第一天——字符串连接的N种方法

Javascript 字符串的连接方法有多种,但效率却有很大区别. 1.逐个字符串相加 var arr = ['item 1', 'item 2', 'item 3', ...]; var list = ''; for (var i = 0, l = arr.length; i < l; i++) { list += '<li>' + arr[i] + '</li>'; } list = '<ul>' + list + '</ul>'; 这种最常见的,