javascript中Function类型详解


Posted in Javascript onApril 28, 2015

Function 类型

function类型,毋庸置疑是js中相当重要的一个玩意。

1.这玩意首先是一个对象,也就是说它是一个引用类型。陈述:一听说是对象,是不是很有一种它的基类是object对象错觉感,No,

它和object是独立的2个东西。当你typeof function 时,返回的是 funciton 并非 object

2.每个函数都是 Function 对象的一个实例,它与其他引用对象一样具有属性和方法。由于它是对象所以函数名是指向函数对象的指针

关于函数的声明的语法支持:

<script>

  //方式1
  function fun(num1,num2){
    return num1+num2;
  }
  
  //方式2
  var fun=function(num1,num2){
    return num1+num2;
  };

  //方式3
  var fun=new Function("n1","n2","return n1+n2");
  
</script>

讲解:3种方式都能完成一个函数的声明,但各有不同。

方式1 理解为 一个函数的声明,方式2,方式3理解为函数表达式。(方式3不推荐使用,原因会导致解析2次代码,先解释常规ECMAScript代码,在解释传入的参数,这种

写法,参数可以是N个,但是最后一个参数视为函数主体)

为什么说不同,主要在于,js解析器对函数声明 和 函数表达式 解析的不同。解析器会优先读取函数申明,js引擎在执行时会将函数声明自动放到执行环境的最顶端。

而函数表达式则不同,当执行到函数表达式时,才会真正去被解释执行。关于这点理解很重要!

看代码

<script>
  console.log(typeof fun); //"function"
  console.log(typeof fun2); //"undefined"
  console.log(typeof fun3); //"undefined"
  function fun(n1,n2){
   return n1+n2;
  }
  var fun2=function(n1,n2){
   return n1+n2;
  }
  var fun3=new Function("n1","n2","return n1+n2;");
 </script>

3.为什么函数没有重载?

这个问题要从js的语言特性来考虑。在第2条已经说了,函数名称只是指向函数对象的一个指针。根据指针的概念去理解就清楚了。

看代码示例:

<script>
  function fun(n1){
   return n1+100;
  }
  function fun(n1){
   return n1+200;
  }
  console.log(fun(1));// 201 
  
  //以上写法在解析后应为
  
  var fun=function(n1){
    return n1+100;
  }
  fun=function(n1){
   return n1+200;
  }
  
  // fun 的引用被覆盖了
  console.log(fun(1));// 201 
 </script>

今天就写到这,都是写基本概念,希望对这块有盲点的起到帮助!有什么需要指正的地方,希望各位霸气留言指正。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
js文字滚动停顿效果代码
Jun 28 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JS+CSS实现仿msn风格选项卡效果代码
Oct 22 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
vue配置请求本地json数据的方法
Apr 11 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
Aug 01 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
vue  elementUI 表单嵌套验证的实例代码
Nov 06 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
Mar 14 Javascript
javascript实现简易数码时钟
Mar 30 Javascript
js中复选框的取值及赋值示例详解
Oct 18 Javascript
浅谈Jquery为元素绑定事件
Apr 27 #Javascript
javascript实现实时输出当前的时间
Apr 27 #Javascript
javascript模拟php函数in_array
Apr 27 #Javascript
js实现刷新iframe的方法汇总
Apr 27 #Javascript
JavaScript数组和循环详解
Apr 27 #Javascript
javascript实现全局匹配并替换的方法
Apr 27 #Javascript
js限制文本框只能输入整数或者带小数点的数字
Apr 27 #Javascript
You might like
URL Rewrite的设置方法
2007/01/02 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
php全角字符转换为半角函数
2014/02/07 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
php实现的xml操作类
2016/01/15 PHP
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
javascript 封装Date日期类实例详解
2017/05/28 Javascript
关于vue面试题汇总
2018/03/20 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
初步解析Python下的多进程编程
2015/04/28 Python
Python检测生僻字的实现方法
2016/10/23 Python
Python面向对象特殊成员
2017/04/24 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python PIL库图片灰化处理
2020/04/07 Python
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
学校门卫管理制度
2014/01/30 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
十八大演讲稿
2014/05/22 职场文书