学习 Node.js ,必学如何使用 require 语句。本文通过源码分析,详细介绍 require 语句的内部运行机制,帮你理解 Node.js 的模块机制。...二、Module 构造函数 了解内部逻辑以后,下面就来看源码。 require 的源码在 Node 的 lib/module.js 文件。...this.children = []; } module.exports = Module; var module = new Module(filename, parent); 上面代码中,Node 定义了一个构造函数...可以看到,当前模块(module.js)也是 Module 的一个实例。 每个实例都有自己的属性。下面通过一个例子,看看这些属性的值是什么。新建一个脚本文件 a.js 。...被 b.js 调用,所以 parent 属性指向 b.js 模块,id 属性和 filename 属性一致,都是模块的绝对路径。
25 data.sort(createCompareFun("name")); 26 document.write("用name排序,获得的第二位的元素的...name是:【"+data[2].name+"】") 29 说明:createCompareFun()函数内部,嵌套一个内部函数,函数作为值被return返回, 内部函数传两个参数...,并通过[]讲createCompareFun()函数的propertyName属性解析出来,在通过常规比较函数进行判断、比较。...在data中,定义了一个有三个元素的对象数组,最后调用createCompareFun()函数,并根据自己需要比较的属性来传参,函数对数组进行排序。得到比较的结果。...再加一个普通的比较函数 1 function compare(value1,value2){ 2 if(value1>value2
Object.keys() Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。...循环对象属性的时候,使用for...in;遍历数组的时候的时候使用for...of。...for...in循环出的是key,for...of循环出的是value for...of是ES6新引入的特性。...修复了ES5引入的for...in的不足 for...of不能循环普通的对象,需要通过和Object.keys()搭配使用 注释: for...of循环不会循环对象的key,只会循环出数组的value,...:[...arguments] 4. substr 和 substring substr第一个参数是开始截取的位置,第二个参数是截取的长度 substring第一个参数是开始截取的位置,第二个参数是截取的结束位置
最原始的写法就是for循环。...var index = 0; index < arr.length; index++) { console.log(myArray[index]); // 1 2 3 4 5 } 缺点:这种写法比较麻烦...for...in循环主要是为遍历对象而设计的,不适用于遍历数组 for...of for…of是ES6新增的遍历方式,它提供了统一的遍历机制。...break语句,跳出for...of循环的例子。...类似数组的对象包括好几类。
1.使用函数对象,可以让函数变得有状态。而且可以在运行期再初始化。 2.函数对象通常比寻常函数速度快。
null ) { let xKeys = Object.keys(x); let yKeys = Object.keys(y); // 如果key的数量不一致
在 Node.js 中,回调函数是一种常见的异步编程模式。它允许你在某个操作完成后执行特定的代码。回调函数在处理 I/O 操作、事件处理和异步任务时非常常见。...本文将详细介绍 Node.js 回调函数的原理、使用方法和一些常见问题。什么是回调函数?回调函数是一种高阶函数,即作为参数传递给其他函数,并在后续某个时间点被调用的函数。...通常使用错误优先的约定,即回调函数的第一个参数是错误对象(如果有错误),而后续参数是返回的数据。Node.js 使用回调函数的目的是避免 I/O 阻塞,提高并发能力和性能。...回调函数的使用方法在 Node.js 中,使用回调函数的一般流程如下:定义一个需要延迟执行的操作,例如读取文件或发送网络请求。在函数的参数列表中定义一个回调函数。...结论回调函数是 Node.js 异步编程中的重要概念,它允许你在某个操作完成后执行特定的代码。本文详细介绍了回调函数的原理、使用方法和错误处理,以及如何避免回调地狱问题。
本文结构: 什么是激活函数 为什么要用 都有什么 sigmoid ,ReLU, softmax 的比较 如何选择 ---- 1....什么是激活函数 如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。 ? ---- 2....为什么要用 如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。...也叫 Logistic 函数,用于隐层神经元输出 取值范围为(0,1) 它可以将一个实数映射到(0,1)的区间,可以用来做二分类。 在特征相差比较复杂或是相差不是特别大时效果比较好。...---- 4. sigmoid ,ReLU, softmax 的比较 Sigmoid 和 ReLU 比较: sigmoid 的梯度消失问题,ReLU 的导数就不存在这样的问题,它的导数表达式如下: ?
strcmp()函数: #define _CRT_SECURE_NO_WARNINGS #include #include void test() { //字符串的比较...char s1[32] = { 0 }; fgets(s1, sizeof(s1), stdin); //fgets会从缓冲区中带走\n回车符 //需要把字符串结尾的\n改为\0 s1[strlen..."s1<s2"); } } int main() { test(); return 0; } 注意:strlen(s1)是数组中存储最后一个非空白字符后面一个元素 strncmp函数...: #define _CRT_SECURE_NO_WARNINGS #include #include void test() { //字符串的比较 char...s1[32] = { 0 }; fgets(s1, sizeof(s1), stdin); //fgets会从缓冲区中带走\n回车符 //需要把字符串结尾的\n改为\0 //如果改成sizeof
source, target) { return source === target } const MAX_RANGE = 10000 /** * 数组数据比对 * @summary * 比较数组差异...,筛选出: * 1.相同项 ( 未改变 ) * 2.旧的不同项 (已删除) * 3.新加入项 (新添加) * 用于多选数组数据比较 * 注意:限制了最大便利数 MAX_RANGE *...@param {*} oldList 旧数据 * @param {*} newList 新数据 * @param {*} check 校验函数 * @returns * - someList
if(left[0]<right[0]){//都是把小的放在排好的数组前面 result.push(left.shift()); }else{...(min);//把这个最小的数放在新的数组中 //又去拿最小的数 } return new_arr; } //============================== function quickSort...就往前面交换,这个两个相互交换的数,相距增量这么远。...,还要与前面已经排好数的进行比,如果大,还要前移 arr[i]=arr[i-1];//把大的往后移 while(x<=arr[j]){//如果已经排好的数组最后一位,大于保存的那个小的,就要后移...arr[j+1]=arr[j];//上面保存的,只要他还大,就前移 j--; } arr[j+1]=x;//把这个大的数给这个前面排好的部分最后一位 } }; return arr; }
函数的声明与函数表达式区别 1.1 函数的声明 如下方法 add 就是函数声明的代码结构: function add(x,y){ alert(x+y) } add(1,2) //弹窗显示...1.3 区别 JS中常见的两种函数声明(statement)方式有这两种: 复制代码 // 函数表达式(function expression) var h = function() {...h, 故会打印此结果 深入: JS声明函数的三种方式: 1.函数表达式: 即上面第一种方式, 这种方法使用function操作符创建函数, 表达式可以存储在变量或者对象属性里....下面我们来看下一些比较有趣的自执行函数表达方式: // 下面2个括弧()都会立即执行 (function () { /* code */ } ()) // 推荐使用这个 (function ()...{ /* code */ })() // 但是这个也是可以用的 // 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的 // 所以一旦解析器知道其中一个已经是表达式了
大家好,又见面了,我是你们的朋友全栈君。 定义:匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点。 匿名函数:没有实际名字的函数。...首先我们声明一个普通函数: //声明一个普通函数,函数的名字叫fn function fn(){ console.log(“张培跃”); } 然后将函数的名字去掉即是匿名函数: //匿名函数...解决方法只需要给匿名函数包裹一个括号即可: //匿名函数在其它应用场景括号可以省略 (function (){ //由于没有执行该匿名函数,所以不会执行匿名函数体内的语句。...在这里简单介绍一下:闭包是可以访问在函数作用域内定义的变量的函数。若要创建一个闭包,往往都需要用到匿名函数。 2、模拟块级作用域,减少全局变量。...执行完匿名函数,存储在内存中相对应的变量会被销毁,从而节省内存。再者,在大型多人开发的项目中,使用块级作用域,会大大降低命名冲突的问题,从而避免产生灾难性的后果。
背景 我没有系统性的从头开始学过一遍JS,全凭之前学的其它语言,尤其是Python,直接上手操作了,所以留了不少的坑。 虽然对我来说是一个坑,但我觉得本文更适合放到学习的分类里。 给出下列代码。...= [1, 2, 3] const arr2 = [] each(arr1, item => arr2.push(item)) console.log(arr2) // [ 1, 2, 3 ] 这个函数它的功能就是遍历一遍数组...原理 原理很简单,就是action(item)这样调用的时候,传给action的this是undefined。 新建一个文件,写入下列代码足以验证。...解决方案 我们需要进行一个操作,如果也想像Python那样: Function.prototype.bind() bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this...被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
什么是函数式编程 函数式编程是一种编程范式,是一种构建计算机程序结构和元素的风格,它把计算看作是对数学函数的评估,避免了状态的变化和数据的可变。...函数返回递增的值,而不改变变量的值。 如果我们遵循这两条简单的规则,就会更容易理解我们的程序。现在每个函数都是孤立的,不能影响系统的其他部分。 纯函数是稳定的、一致的和可预测的。...在JS中,我们通常使用for循环,for的每次遍历 i是个可变变量。...函数是 JS 中的一级公民 函数作为 JS 中的一级公民,很风骚,函数也可以被看作成值并用作数据使用。 从常量和变量中引用它。 将其作为参数传递给其他函数。 作为其他函数的结果返回它。...三个函数的示例 看了每个高阶函数的工作原理。这里为你展示一个示例,说明如何在一个简单的示例中组合这三个函数。
更简短的函数并且不绑定this。箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。...箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。...(singleParam) => { statements } singleParam => { statements } // 没有参数的函数应该写成一对圆括号。...elements.map(function(element) { return element.length; }); // 返回数组:[8, 6, 7, 9] // 上面的普通函数可以改写成如下的箭头函数...elements.map(element => { return element.length; }); // [8, 6, 7, 9] // 当箭头函数的函数体只有一个 `return` 语句时
简要比较: replace 字符串级别的代替 如:SELECT REPLACE('accd','cd','ef') from dual; --> aefd translate 字符级别的代替...,以#开头的表示所有字符 translate的主要作用是提取,替换字符串,其作用有时候和replace差不多.具体看下面的例子 Sql代码 select translate('liyan4h123ui...有时候需要对一些关键词语进行过滤,直接使用replace的话,可能由于这些关键词语比较多而要嵌套使用,语句也不好写,同时也浪费资源。...比如要将“深圳”、“北京”等作为关键词语,在显示内容是要将这些词语过滤掉不显示: Sql代码 --首先使用TRANSLATE将关键词语统一转换成一个特殊的字符串,比如这里的X SQL> select...------------------------------ 上海X天津重庆X广州XX武汉 --首先使用TRANSLATE将关键词语统一转换成一个特殊的字符串,比如这里的X SQL> select
React.js和Vue.js都是很好的框架。而且Next.js和Nuxt.js甚至将它们带入了一个新的高度,这有助于我们以更少的配置和更好的可维护性来创建应用程序。...但是,如果你必须经常在框架之间切换,在深入探讨另一个框架之后,你可能会轻易忘记另一个框架中的语法。在本文中,我总结了这些框架的基本语法和方案,然后并排列出。...我希望这可以帮助我们尽快掌握语法,不过限于篇幅,这篇文章只比较React.js和Vue.js,下一篇再谈Next.js个Nuxt.js。 ?...button onClick={() => handleDelete(item)}>{item.name}; /* * 应用useCallback钩子来防止在每次渲染时生成新的函数...v:once This will never change: {{msg}} 函数式组件:我们可以将组件标记为 functional,这意味它无状态 (没有响应式数据
1.arguments.callee //经典的阶乘(递归)函数 function factorial(num) { if...} else { return num * factorial(num - 1); } } //消除函数名的耦合现象...可以继续使用递归 否则返回0 alert(factorial(5)); //0 2.Length:表示函数希望接收的命名参数的个数 3.prototype:在创建自定义引用类型以及实现继承时,该属性的作用极为重要...,该属性不可枚举,因此使用for-in 无法发现 方法: 1.apply()和call() 用途:在特定的作用域中调用函数,等于设置函数体内this对象的值 <span style="color:...,其this<em>的</em>值会被绑定到传给bind()<em>函数</em><em>的</em>值 window.color = "red"; var o = { color: "blue" }; <span style="color: #333399
简要比较: replace 字符串级别的代替 如:SELECT REPLACE('accd','cd','ef') from dual; --> aefd translate 字符级别的代替 如:select...,以#开头的表示所有字符 translate的主要作用是提取,替换字符串,其作用有时候和replace差不多.具体看下面的例子 Sql代码 select translate('liyan4h123ui...有时候需要对一些关键词语进行过滤,直接使用replace的话,可能由于这些关键词语比较多而要嵌套使用,语句也不好写,同时也浪费资源。...比如要将“深圳”、“北京”等作为关键词语,在显示内容是要将这些词语过滤掉不显示: Sql代码 --首先使用TRANSLATE将关键词语统一转换成一个特殊的字符串,比如这里的X SQL> select...------------------------------ 上海X天津重庆X广州XX武汉 --首先使用TRANSLATE将关键词语统一转换成一个特殊的字符串,比如这里的X SQL> select
领取专属 10元无门槛券
手把手带您无忧上云