PineApple_Ninja.js
1.本章内容
2.理解函数的重要性
3.定义函数的方式
4.参数赋值

JavaScript中最关键的函数是:第一类对象(first-class objects)
函数与对象共同存在,函数也可以被视为其他任意类型的JS对象。
函数和普通数据类型一样,能被变量引用,能以字面形式声明。
甚至还可以写箭头(arrow)函数,它能帮你编写更优美的代码。
先让我们来学习一下他的优点吧!
首先要带着几个问题来学习
1.回调函数在哪种清下会同步调用,或者异步调用呢?
2.箭头函数和函数表达式的区别是什么?
3.你为什么需要在函数中使用默认参数?

**

函数的不同点到底是什么?

**
函数以及函数式概念之所以重要,原因在于函数是程序执行过程中的主要模块单元。
除了全局javascript代码是在页面构建的阶段执行的,我们编写的所有的脚本代码都将在一个函数内执行。

由于我们的大多数代码会作为函数调用来执行,因此我们在编写代码时,通过用强大的构造器能赋予代码很大的灵活性和控制力。接下来看几张常用功能
下面展示一些 内联代码片

// 对象可以通过字面量来创建{}
//对象可以赋值给变量、数组项,或其他对象的属性。
var ninja={};         //为变量赋值一个新对象
ninjaArray.push({});  //向数组中添加一个新对象
ninja.data={}         //给某个对象的属性赋值为一个新对象
// 对象可以作为参数传递给函数
function hide(ninja){ninja.visibility=false;  //一个新创建的对象作为参数传递给函数
}
// 对象可以作为函数的返回值
function returnNewNinja(){return {}              //从函数中返回了一个新对象
}
// 对象能够具有动态创建和分配的属性
var ninja={};
ninja.name="PineApple";  //为对象分配一个新属性

JS不同于很多其他编程语言,在JS中,我们几乎能够用函数来实现同样的事。
**

函数是第一类对象

**
JS中函数拥有对象的所有能力,也因此函数可被称作为任意其他类型对象来对待。当我们说函数是第一类对象的时候,就是说函数也能实现以下功能。

// 通过字面量创建
function ninjaFunction() {}
// 赋值给变量,数组或其它地下的属性
var ninjaFunction=function(){}; //为变量赋值一个新函数
ninjaArray.push(function(){});  //想数组中添加一个新函数
ninja.data=function(){};       //给某个对象的属性赋值为一个新函数
// 作为函数的参数来传递
function call(ninjaFunction)
{ninjaFunction();
}
call (function(){});            //一个新函数作为参数传递给函数
// 作为函数的返回值
function
returnNewNinjaFunction(){return function(){};           //返回一个新函数}
//具有动态创建和分配的属性
var ninjaFunction=function(){};
ninjaFunction.ninja="PineApple";  //为函数增加一个属性

对象能做的任何一件事,函数也都能做。函数是对象,唯一的特殊之处在于它是可以调用的(invokable),既然函数会被调用以便执行某项动作。
第一类对象的特点之一是,它能作为参数传入函数。对于函数而言,这项特性表明:如果我们将某个函数作为参数传入另一个函数,传入函数会在应用程序执行的未来某个时间点才执行。大家所知道的更一般的概念是回调函数(callback function )接下来深入学习重要概念

// JavaScript中的函数编程
/**把函数作为第一类对象是函数式编程(functional programming)的第一步,函数式编程是一种编程风格。它通过书写函数式(而不是指定一系列执行步骤,就像那种更主流的命令式编程)代码来解决问题。函数式编程可以让代码更容易测试,扩展及模块化。但这是一个很大的话题,会牵扯很多知识。如果你对函数式编程很有兴趣推荐月入Luis Atencion的书去
**/

**

回调函数

**
当我们建立了一个将在随后调用的函数时,无论是在事件处理阶段通过浏览器还是通过其他代码,我们都是在建立一个回调(callback).这个属于源自于这样一个事实,既在执行过程中,我们建立的函数会被其他函数在稍后的某个合适事件点“再回来调用”
有效运用JS的关键在于回调函数
不论是 单击一次按钮 ,从服务端接受数据,还是UI动画一部分
此段章将讲述实际使用回调函数的典型例子。这部分会有些复杂,所以在深入前要先了解它的概念。我们务必要理解透彻,才能像忍者一样快速手里剑,精通各种暗杀武器
那么回调函数,就是我们的手里剑!也是忍者的入门练习武器之一

function
useless(ninjaCallback){return ninjaCallback();
}

这个函数可能看起来没什么用,但他反应了函数的一种能力,即将函数作为另一个函数的参数,随后通过参数来调用该函数.

var text="手里剑";
report("风遁——巨魔手里剑!");
function useless(ninjaCallback){report("水遁——水分身手里剑!");return ninjaCallback();          //函数定义,参数为一个回调函数,其函数体内会立即调用该回调函数
}
function getText(){report("雷遁——千鸟手里剑!");return text;           //简单的函数定义,仅返回一个全局变量
}report("通灵术");assert(useless(getText)===text),"反向通灵术"+text)' //把getText作为回调函数传入上面的useless函数report("倍攻倍化术");

在这个代码清单中,我们使用自定义函数report()来输出执行过程中的信息,这样一来我们就能通过这些信息来跟踪程序的执行过程。
还使用了 断言函数assert。 该函数通常使用两个参数。第一个参数是用于断言的表达式。
我们需要确定使用参数getText调用useless(getText)===text 判断是否相等
若第一个参数的执行结果为true 断言通过;反之,断言失败。
第二个参数是断言相关联的信息。通常输出在log上。

PineApple_Ninja.js相关推荐

  1. 在js中使用HashMap数据结构,在js中使用K,V数据结构

    首先是定义一个HashMap方法,做基类(复制在js中即可,然后引用) //简单的哈希表,begin function HashMap() {/** Map 大小 * */var size = 0;/ ...

  2. js校验复选框(多选按钮)是否被选中的方法

    js校验复选框是否被选中的方法 方法一:(使用下标进行标记) if ($("#checkbox-id")get(0).checked) {// do something } 方法二 ...

  3. form表单提交前进行ajax或js验证,校验不通过不提交

    在使用form表单进行提交数据前,需要进行数据的校验->表单的校验(如:两次密码输入是否相同)+后台数据的校验(如:账号是否存在),这个时候,如果哪步校验不通过,表单将停止提交,同时避免后台主键 ...

  4. 终止js程序执行的方法

    js终止程序执行的方法共有三种 (一)在function里面(普通js方法) (1)return; (2)return false; (二)非function方法里面(如ajax方法) alert(& ...

  5. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

    最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...

  6. 用js方法做提交表单的校验

    基础知识: 原始提交如下: <form action="<%=basePath %>puser/register" method="post" ...

  7. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  8. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  9. js获取html代码中所有图片地址

    /** * JS获取html代码中所有的图片地址 * @param htmlstr * @returns imgsrcArr 数组 */ function getimgsrc(htmlstr) { v ...

最新文章

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之usb流量分析
  2. 经过不断努力 终于获得“推荐博客”的荣誉
  3. JavaScript 下载大文件解决方案(Blob+OjbectURL)
  4. OVS端口镜像(十五)
  5. 16.PAE分页实验
  6. mysql命令:查看表结构
  7. 计算机专业自我总结1000字,计算机专业自我鉴定范文1000字
  8. ad20生成二维码_AD20学习笔记一
  9. 在iMac上如何轻松去掉程序坞中最近打开过的应用--小技巧
  10. JDBC中PreparedStatement接口的执行逻辑
  11. Python(十六):标准库
  12. html 多选框取值,多选框取值
  13. 微信记账本小程序(代码+功能介绍)
  14. 微信、米聊等国内kik类手机通信录互动应用前景探讨
  15. 购买一台计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
  16. 解决Android Studio等开发软件出现更新TKK失败的两种方案
  17. 读书笔记之:C++ Primer (第4版)及习题(ch12-ch18)
  18. go get 不了,就使用 go.mod中的replace来引入远程包(需要把远程包下载在本地)
  19. 2万字Linux实用常用命令总结,收藏不吃灰~
  20. 腾讯云服务器远程连接登录流程

热门文章

  1. 【NLP-NER】命名实体识别
  2. 百年诺奖的那些争议与放弃
  3. spring boot学习(2) SpringBoot 项目属性配置
  4. css —— 图片环绕+首行缩进
  5. [iOS]深度遍历view的subview
  6. 使用文件监控对象FileSystemWatcher实现数据同步
  7. java单利模式写法
  8. C++ 数据指针(-)
  9. 实现了HTTP多线程下载
  10. 《力学》课时二质点运动学(二)