当前位置: 首页 > news >正文

企业网站建设效果微信商城系统免费

企业网站建设效果,微信商城系统免费,网站建设如何添加歌曲,重庆网站建设 沛宣函数声明 之前说的三种函数声明中#xff08;参见JavaScript快速入门#xff08;二#xff09;——JavaScript变量#xff09;#xff0c;使用Function构造函数的声明方法比较少见#xff0c;我们暂时不提。function func() { }和var func function() { }除了在声明提升…函数声明 之前说的三种函数声明中参见JavaScript快速入门二——JavaScript变量使用Function构造函数的声明方法比较少见我们暂时不提。function func() { }和var func function() { }除了在声明提升中有所不同之外也没有其他不同我们合并起来一起看。我们在这里着重讲一个东西——匿名函数。 匿名函数顾名思义就是没有名字的函数。它的形式就是function() { }。请注意和之前说的两种方式的区别这里并没有赋值给任何变量也就是说没有指向这个函数的引用我们无法在其他地方调用这个函数也就是说这种函数的使用价值只有一次。当我们把匿名函数赋值给其他变量时就变成了var func function() { }。是不是很熟悉没错就是我们之前说的变量声明的方法。而如果func是隐式声明的话那么这个函数就变成了全局函数。 匿名函数使用非常广泛它常用于只执行一次的函数例如排序函数我们可以这样来写   var a [2,1,4,7,5]; a.sort(function(num1, num2) {return num1 num2; }) 我们传了个匿名函数作为参数因为这个函数只适用于这个地方而无法用在其他地方。但如果是类似的地方也用了类似的函数例如我们需要两次排序     var a [2,1,4,7,5],b [4,2,6,4,1]; function sortDesc(num1, num2) {return num1 num2; } a.sort(sortDesc); b.sort(sortDesc); 我们就可以把这个匿名函数剥离出来赋给一个function类型的变量达到重复利用的目的。   由上面这个例子我们可以看出匿名函数的优劣。坏处很明显就是无法再次利用好处是减少了声明的消耗当然如果有两次以上的利用的话当然是声明的消耗更少。   函数调用 函数的调用和C中差不多但形式可能有点不同。JavaScript的函数调用形式为(函数)(参数列表)或者函数名(参数列表)。后者和C是一样的但前者和C是迥然不同的因为C中函数声明和函数调用是区分开的。先来看下例子 function add(num1, num2) {return num1 num2; } var a add(1, 2); // 3 这种方式就是函数名(参数列表)的形式我们在C中经常见到就不详细说了我们可以把上面那个换种形式来展现 var a (function add(num1, num2) {return num1 num2; })(1, 2); console.log(a); // 3 这样我们就能实现声明和执行一块处理。 但是这样有个问题我们再看一种情况 var a (function add(num1, num2) {return num1 num2; })(1, 2); var b add(1, 2); // error,add is not defined console.log(a); // 3 console.log(b); // undefined 这是因为add这个变量的作用域仅限于括号内这个在之后的作用域讲解中将讲到。 这样的调用一般是在匿名函数中为了让函数立即执行才使用这种方式又或者利用它的不足利用JavaScript的作用域特点将函数内的变量全部转为局部变量达到封装和防止污染全局的目的。 函数嵌套 JavaScript的函数理论上是可以无限嵌套的当然并不推荐嵌套太多原因有很多无论是性能还是代码简洁要求都要求不应该嵌套太多。我们举一个嵌套的例子 function getAbs(num) {function isNegative(num) {return num 0;}return isNegative(num) ? -num : num; } var a getAbs(-1); // 1 记住一句话有嵌套就有父子关系相互嵌套的不在参考范围内也极度不推荐。在上面的例子中父函数即为getAbs子函数为isNegative。 在JavaScript的嵌套中涉及到作用域的问题我们先不讲太复杂的简单的可以记成父函数中声明的所有变量或者说父函数中能使用的变量都能在子函数中使用但反过来子函数中显式声明的所有变量都不能在父函数中使用。下面会讲到caller和callee来帮助理解嵌套。 arguments对象 函数中有一个默认的对象不需要你去声明也不需要你去赋值它叫做arguments它是一个数组保存着参数列表。先来看一个例子 function add(num1, num2) {console.log(arguments); // [1, 2]return num1 num2; }; var b add(1, 2); 注意arguments对象保存的是实参。接下来我们要展示JavaScript中非常有意思的一个东西也是JavaScript灵活性的一大体现。在这之前我们先来谈下C中的函数重载。 维基中的定义为函数重载(Function overloading)是Ada、C、C#、D和Java等编程语言中具有的一项特性这项特性允许创建数项名称相同但功能的输入输出类型不同的子程序它可以简单地称为一个单独功能可以执行多项任务的能力。 在函数重载中输出类型可相同可不同但参数列表一定要不一样可以是数量不一样或者类型不一样或者两者都不一样。 但在JavaScript这类弱类型语言中类型无法预定义即输入和输出类型无法从函数定义看出来。那么只剩一项了参数列表的长度即参数数量。但这真的有影响吗 实际上JavaScript没有函数重载实参比形参长的后果仅仅是没有给实参一个别名而已。不懂我们来看下例子 function add(num1, num2) {console.log(arguments); // [1, 2, 3]return num1 num2 arguments[2]; }; var b add(1, 2, 3); // 6 我们可以巧妙的利用arguments对象来达到我们的目的。我们甚至可以对上面的做个扩展让它能把所有参数的和返回即使形参列表为空。 function add() {var sum 0;for(var count 0, length arguments.length; count length; count) {sum arguments[count];}return sum; }; var b add(1, 2, 3, 4); // 10 那如果相反形参列表长度比实参列表长呢 function add(num1, num2) {console.log(num1); // 1console.log(num2); // undefinedreturn num1 num2; }; var b add(1); // NaN 我们可以看到超出实参长度的形参部分就会是undefined从而返回我们并不想要的结果NaN表示应该是个number类型结果却是其他类型。我们可以稍作修改 function add(num1, num2) {num2 num2 || 0;return num1 num2; }; var b add(1); // 1 利用逻辑操作符的特性来将形参实例化保证使用时形参不为undefined。当然这样也有个别问题如果传入的实参逻辑值也是false例如0、undefined、null等等我们就需要用全等符号进行判断了在此例中不做要求。 caller和callee 这两个对象是用于判断函数调用和执行的对象函数的。其中arguments.callee返回当前正在执行的函数func.caller返回函数的调用体所在函数。而arguments.caller永远返回undefined。如果调用函数是在全局进行那么func.caller将返回null。注意在严格模式下这两个对象将被禁用。 我们举刚才的一个代码为例 function getAbs(num) {function isNegative(num) {console.log(isNegative.caller); // getAbsconsole.log(arguments.callee); // isNegativereturn num 0;}return isNegative(num) ? -num : num; } var a getAbs(-1); 你可以将这段代码运行一下会发现arguments.callee永远指向函数本身而函数名.caller将指向调用该函数的代码所在函数例如本例中即为getAbs。不过如果通过函数名.caller来寻找的话耦合度太高。我们可以把两个结合起来 function getAbs(num) {function isNegative(num) {console.log(arguments.callee)console.log(arguments.callee.caller)return num 0;}return isNegative(num) ? -num : num; } var a getAbs(-1); 有人问这个有什么用这个严格的来说不是太有用而且其安全性有问题否则严格模式也不会禁用掉这两个对象了。但说没用也是不可能的要不然也不会出现这两个东西了。 首先这个在调试的时候特别有效可以帮我们理清代码执行顺序或者寻找bug 其次可以用这两个变量实现一些花哨的技巧例如我们实现斐波那契数正常做法是这样 function fib(num) {if(num 1 || num 2) {return 1;}return fib(num - 1) fib(num - 2); } var b fib(6); // 8 但是这样的坏处在于我们如果要更改个函数名我们将同时修改三个地方调用的暂时不论。我们可以用我们刚学到的东西来解决这个问题 function fib(num) {if(num 1 || num 2) {return 1;}return arguments.callee(num - 1) arguments.callee(num - 2); } var b fib(6); // 8 但是投机取巧也是有其弊端的这会让别人在看你的代码的时候很费劲。用不用取决于具体情况。 转载于:https://www.cnblogs.com/smght/p/4369549.html
http://www.sadfv.cn/news/13461/

相关文章:

  • vps 网站打不开wordpress 免邮箱
  • 新闻资讯网站php源码做网站哪种域名好记
  • 建设局施工许可证网站太原做网站的网络公司
  • 做涂鸦的网站微信app下载安装教程
  • 苏州城乡建设网站查询东莞教育团购网站建设
  • 一个网站的构建电销系统外呼软件
  • 网站下载的视频怎么变成本地视频宁波汽车网站建设
  • 陇南市建设局官方网站北京游戏网站建设
  • 网站首页轮播图怎么换贝壳找房官网 二手房
  • 中国平安保险公司官网网站seo优化推推蛙
  • 中国建筑英才网招聘网官网免费推广seo
  • 做外贸那个网站好网站建设的数据所有权
  • wordpress 获取评论海南企业网站做优化排名
  • 免费建立永久网站博客平台
  • 玉溪市规划建设局网站深圳有几个区哪个区最富裕
  • xxx网站建设策划书范文wordpress导航编辑
  • 最新开的手游传奇网站小程序注册平台
  • 78建筑网站做网站公司哪家便宜
  • flash网站管理系统百度关键词排名技术
  • 天津制作网站公司推荐共享网站哪里建
  • 地方志网站建设wordpress 圆角主题
  • 深圳网站建设定制开发 .超凡科技北京seo优化技术
  • 程序网站开发宣城市市政建设集团公司网站
  • 网站建设维护培训班如何创建自己的网站平台免费
  • 网站开发时间表网站制作方案大全
  • dw做的网站如何发布wordpress删除文章
  • 网站空间支持功能快速提升网站排名
  • 公司网站建设费怎么做账惠州免费建站模板
  • asp网站有哪些怎么查公司网站可信度
  • 如何写网站优化方案做网站备案是个人还是企业好