var函数

JavaScript 十种基本算法

一世执手 提交于 2020-01-03 05:02:10
  在传统的计算机算法和数据结构领域,大多数专业教材和书籍的默认语言都是Java或者C/C+ +。当我了解到有一本叫做《数据结构与算法JavaScript描述》时,觉得它是一本很好的针对前端开发者们的入门算法书籍。有一个问题是,很多重要的算法和数据结构知识并没有在这本书里被提到。这些问题对于作为一个晚期强迫症患者的我来说简直不能忍。于是乎,一言不合我就决定自己找资料总结算法。那么,我就从算法领域里最基础的知识点——排序算法总结起好了。 十大经典算法概括图 名词解释:   n:数据规模   k:“桶”的个数   In-place:占用常数内存,不占用额外内存   Out-place:占用额外内存   稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同 ① 冒泡排序   作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样, 每次都在第一页第一位 ,所以最熟悉。冒泡排序还有一种优化算法,就是立一个flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。 演示图   JavaScript代码实现  function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j

前端面试题(四)

戏子无情 提交于 2020-01-03 04:57:59
数组去重方法 方法一: 1、先创建一个空数组,用来保存最终结果 2、循环原数组中的每一个元素 3、再对每个元素进行第二次循环,判断是否有与之相同的元素,如果没有把这个元素放到新数组中 4、返回这个新数组 var arr = []; var arr1 = [1,3,4,6,7,2,5,3,4,0] for (var i = 0;i<arr1.length;i++){ for(var j = i+1;j<arr1.length;j++){ if(arr1[i] === arr1[j]){ ++i; } } arr.push(arr1[i]); } console.log(arr.sort()); 方法二: /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){//indexOf() 方法可返回数组中某个指定的元素位置。 if(temp.indexOf(array[i]) == -1){//如果在数组中没找到指定元素则返回 -1 temp.push(array[i]); } } return temp; } var aa = [1,2,2,4

LINQ聚合算法解释

末鹿安然 提交于 2020-01-03 04:06:43
这可能听起来很蹩脚,但我还没有找到一个关于 Aggregate 的非常好的解释。 良好意味着简短,描述性,全面,有一个小而明确的例子。 #1楼 Aggregate主要用于分组或汇总数据。 根据MSDN“聚合函数在序列上应用累加器函数”。 示例1:添加数组中的所有数字。 int[] numbers = new int[] { 1,2,3,4,5 }; int aggregatedValue = numbers.Aggregate((total, nextValue) => total + nextValue); * important:默认情况下,初始聚合值是集合序列中的1个元素。 即:默认情况下,总变量初始值为1。 变量解释 total:它将保存func返回的总和值(聚合值)。 nextValue:它是数组序列中的下一个值。 将该值加到聚合值即总数上。 示例2:添加数组中的所有项。 同时将初始累加器值设置为从10开始添加。 int[] numbers = new int[] { 1,2,3,4,5 }; int aggregatedValue = numbers.Aggregate(10, (total, nextValue) => total + nextValue); 论点解释: 第一个参数是初始值(起始值即种子值),它将用于开始添加数组中的下一个值。 第二个参数是一个func

JS函数的定义与调用方法

 ̄綄美尐妖づ 提交于 2020-01-03 00:59:44
JS函数调用的四种方法: 方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式: 先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来执行方法,this即指当前的myobject 对象。 var blogInfo={   blogId:123,   blogName:"werwr",   showBlog:function(){alert(this.blogId);} }; blogInfo.showBlog(); 2.函数调用模式 定义一个函数,设置一个变量名保存函数,这时this指向到window对象。 var myfunc = function(a,b){   return a+b; } alert(myfunc(3,4)); 3.构造器调用模式 定义一个函数对象,在对象中定义属性,在其原型对象中定义方法。在使用prototype的方法时,必须实例化该对象才能调用其方法。 var myfunc = function(a){   this.a = a; }; myfunc.prototype = {   show:function(){alert(this.a);} } var newfunc = new myfunc("123123123"); newfunc.show(); 4.apply

【PHP】PHP7新特性

江枫思渺然 提交于 2020-01-02 21:55:15
PHP7新特性 PHP7.0 PHP7.0新特性 PHP7.0 变化 PHP7.1 PHP7.1新特性 PHP7.1变化 PHP7.2 PHP7.2新特性 PHP7.2变更 PHP7.3 PHP7.3新特性 PHP7.3变化 PHP7.0 PHP7.0新特性 组合比较符 (<=>) 组合比较符号用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1,比较规则延续常规比较规则。对象不能进行比较。 var_dump ( 'PHP' <= > 'Node' ) ; // int(1) var_dump ( 123 <= > 456 ) ; // int(-1) var_dump ( [ 'a' , 'b' ] <= > [ 'a' , 'b' ] ) ; // int(0) null合并运算符 由于日常使用中存在大量同时使用三元表达式和isset操作。使用null合并运算符可以简化操作。 # php7以前 if ( isset ( $_GET [ 'a' ] ) ) { $a = $_GET [ 'a' ] ; } # php7以前 $a = isset ( $_GET [ 'a' ] ) ? $_GET [ 'a' ] : 'none' ; #PHP 7 $a = $_GET [ 'a' ] ? ? 'none' ; 变量类型声明 变量类型声明有两种模式。一种是强制的

大熊君大话NodeJS之------Global Objects全局对象

为君一笑 提交于 2020-01-02 01:34:16
一,开篇分析 在上个章节中我们学习了NodeJS的基础理论知识,对于这些理论知识来说理解是至关重要的,在后续的章节中,我们会对照着官方文档逐步学习里面的各部分模块,好了该是本文主角登台亮相的时候了, Global 让我们来看一下官方的定义: Global Objects全局对象 These objects are available in all modules. Some of these objects aren't actually in the global scope but in the module scope - this will be noted. 这些对象在所有的模块中都可用。实际上有些对象并不在全局作用域范围中,但是在它的模块作用域中------这些会标识出来的。 In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope var something will define a global variable. In Node this is different. The top-level scope is not the global scope; var something inside a

大熊君大话NodeJS之------Stream模块

放肆的年华 提交于 2020-01-02 01:33:29
一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现。比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流。流是可读,可写或兼具两者的。 最早接触Stream是从早期的unix开始的, 数十年的实践证明Stream 思想可以很简单的开发出一些庞大的系统。 在unix里,Stream是通过 "|" 实现的。在node中,作为内置的stream模块,很多核心模块和三方模块都使用到。 和unix一样,node stream 主要的操作也是 .pipe() ,使用者可以使用反压力机制来控制读和写的平衡。 Stream 可以为开发者提供可以重复使用统一的接口,通过抽象的Stream接口来控制Stream之间的读写平衡。 一个TCP连接既是可读流,又是可写流,而Http连接则不同,一个http request对象是可读流,而http response对象则是可写流。 流的传输过程默认是以buffer的形式传输的,除非你给他设置其他编码形式,以下是一个例子: 1 var http = require('http') ; 2 var server = http.createServer(function(req,res){ 3 res.writeHeader(200, {'Content-Type': 'text/plain'}) ; 4 res.end("Hello

canvas函数封装(画圆形图片、文字换行)

和自甴很熟 提交于 2019-12-31 13:41:36
1、画圆形图片 /** * 画圆形图片 * @param {object} ctx canvas * @param {number} width 图像宽度 * @param {number} height 图像高度 * @param {number} x 开始位置 * @param {number} y 结束位置 * @param {string} url 图片地址 */ function drawCircular(ctx,width,height,x,y,url) { var img_w = width; var img_h = height; var img_x = x; var img_y = y; ctx.save(); ctx.beginPath(); ctx.arc(img_w / 2 + img_x, img_h / 2 + img_y, img_w / 2, 0, Math.PI * 2, false); ctx.clip(); ctx.drawImage(url, img_x, img_y, img_w, img_h); ctx.restore(); } 2、根据每行字符长度换行,或者用\n换行 /** * 文字换行,特例可用\n * @param {Object} ctx 画布对象 * @param {String} text 文字 * @param

如何避免javascript中的冲突

戏子无情 提交于 2019-12-31 03:58:14
[1]工程师甲编写功能A var a = 1; var b = 2; alert(a+b);//3 [2]工程师乙添加新功能B var a = 2; var b = 1; alert(a-b);//1 [3]上一步中,工程师乙在不知情的情况下,定义了同名变量a,产生冲突。于是使用匿名函数将脚本包起来,让变量作用域控制在匿名函数之内。 //功能A (function(){   var a = 1;   var b = 2;   alert(a+b);//3 })(); //功能B (function(){   var a = 2;   var b = 1;   alert(a-b);//1 })(); [4]此时有了新需求,网页中加入功能C,且需要用到功能A中的变量b。于是在window作用域下定义一个全局变量,把它作为一个桥梁,完成各匿名函数之间的通信 //全局变量 var str; //功能A (function(){   var a = 1;   //将b的值赋给str   var b = str = 2;   alert(a+b);//3 })(); //功能B (function(){   var a = 2;   var b = 1;   alert(a-b);//1 })(); //功能C (function(){   //将str的值赋给b   var b = str

Vue $refs 原理

自古美人都是妖i 提交于 2019-12-30 10:36:13
这篇文章分析Vue实例怎么通过$refs 访问到dom元素的。通过上一篇的例子来进行分析: <html> <head> <style type="text/css"> </style> </head> <body> <script src="./vue.js"></script> <div id="app"> <div id="div1Id" ref="div1Ref" style="margin-bottom: 20px">div 1 test</div> <button @click="addBorder()">add border for div1</button> </div> <script> const app = new Vue({ el: "#app", methods : { addBorder : function(){ //document.getElementById("div1Id").style.border = "5px solid red"; console.log("div1 is: " + this.$refs.div1Ref.outerHTML); this.$refs.div1Ref.style.border = "5px solid blue"; } } }); </script> </body> </html> <div id="app"