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 相关文章推荐
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
使用js的replace()方法查找字符示例代码
Oct 28 Javascript
Javascript全局变量var与不var的区别深入解析
Dec 09 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
Dec 26 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
Aug 01 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 jQuery
JavaScript实现的商品抢购倒计时功能示例
Apr 17 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
node将geojson转shp返回给前端的实现方法
May 29 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
vue.js实现左边导航切换右边内容
Oct 21 Javascript
详解js中的几种常用设计模式
Jul 16 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
Mysql的常用命令
2006/10/09 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
django的ORM模型的实现原理
2019/03/04 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
django的ORM操作 增加和查询
2019/07/26 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
最新pycharm安装教程
2020/11/18 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
幼儿园安全生产月活动总结
2014/07/05 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python