Tag: JavaScript

如何在没有尾部调用优化的情况下使用函数式编程replacereplacewhile循环?

我在我的JavaScript中尝试更多function的风格; 因此,我已经用循环replace了诸如map和reduce之类的效用函数。 但是,我还没有findwhile循环的function替代,因为tail调用优化通常不适用于JavaScript。 (从我所了解的ES6防止尾部调用溢出堆栈,但不会优化其性能。) 我解释了我在下面试过的,但是TLDR是:如果我没有tail调用优化,while循环实现的function是什么? 我曾经尝试过: 创build一个“while”实用程序function: function while(func, test, data) { const newData = func(data); if(test(newData)) { return newData; } else { return while(func, test, newData); } } 由于尾部调用优化不可用,我可以将其重写为: function while(func, test, data) { let newData = *copy the data somehow* while(test(newData)) { newData = func(newData); } return newData; } 然而在这一点上,我觉得我已经使我的代码更复杂/混淆谁使用它,因为我必须拖动一个自定义的实用function。 我看到的唯一的实际优势是它迫使我使循环纯净; 但似乎只是使用一个常规的while循环更直接,并确保我保持一切纯净。 我也试图找出一种方法来创build一个模仿recursion/循环效应的生成器函数,然后使用find或reduce之类的效用函数对其进行迭代。 […]

添加到Number.MAX_VALUE

这个问题的答案可能是很明显的,但我无法在Mozilla文档中find它,也不能在粗略的search中find它。 如果你有这样的代码 Number.MAX_VALUE + 1; // Infinity, right? Number.MIN_VALUE – 1; // -Infinity, right? 然后,我期望添加任何内容到Number.MAX_VALUE将推到Infinity 。 结果只是Number.MAX_VALUE吐在我身后。 但是,当在Chrome JS控制台中玩耍时,我注意到它实际上并没有成为Infinity直到我加/减足够多: Number.MAX_VALUE + Math.pow(100,1000); // now we hit Infinity Number.MIN_VALUE – Math.pow(100,1000); // -Infinity at last Number.MAX_VALUE和Infinity之间的“缓冲区”是什么?

当模板dom被加载时,在angular2模板/钩子中的脚本标记

我相当卡住,不知道如何解决我的问题… 简化:我有一个基于绑定创buildulist的组件,如下所示: @Component({ selector: "template", template: ` <ul> <li *ng-for="#challenge of jobs.challenges">{{challenge}}</li> </ul> `}) export class JobTemplate{ jobs: Jobs; constructor(jobs:Jobs){ this.jobs = jobs } } 组件select器/主机embedded在由PHP回显的普通htmlstream中,用于replace预定义的ulist。 问题是,在正常的网站上,ulist之后的脚本标签被用来在列表上应用一些jquery魔术。 由于脚本标记在我的组件的模板加载完成之前被回显,所以jquery调用将不会find我的模板DOM的元素。 将脚本标记放在我的模板(最后)不起作用; 它似乎只是被忽略。 <ul> <a><li *ng-for="#challenge of jobs.challenges">{{challenge}}</li></a> </ul> <script> $("ul a").on("click", function (event) { var parent = $(this).parent(); if(parent.hasClass('active')) ….slideToggle("normal"); else …. }); </script> 此外,该网站使用的基础框架,并每次一个新的元素被添加到页面(例如通过绑定我的组件正在外部更新),我需要调用$(document).foundation() 。 所以我的问题是,当我不知道我的模板是否已经完成创build,我怎么能实现在我的模板DOM上调用jQuery。 […]

为什么以及何时需要在React中绑定函数和eventHandlers?

class SomeClass extends Component{ someEventHandler(event){ } render(){ return <input onChange={——here——}> } } 我看到——here——部分的不同版本。 // 1 return <input onChange={this.someEventHandler.bind(this)}> // 2 return <input onChange={(event) => { this.someEventHandler(event) }> // 3 return <input onChange={this.someEventHandler}> 这些版本有什么不同? 还是只是一个偏好问题? 谢谢大家的回答和意见。 所有这些都是有帮助的,我强烈build议阅读这个链接第一,如果你对我感到困惑。 http://blog.andrewray.me/react-es6-autobinding-and-createclass/

Javascript类inheritance的function

我已经build立了一个标准的基类: MyBase = function() { this.m_Stuff = 0; // etc }; MyBase.prototype.MySuperFunction = function (arg1) { alert("Hello" + arg1); }; 接下来,我设置了inheritanceMyBase的另一个类 MyChild = function () { MyBase.call(this); this.m_OtherStuff = 1; // etc }; MyChild.prototype = new MyBase(); // innherit 但是,然后(这是我不知道该怎么做)我想用一个更好的覆盖MyBase的MySuperFunction,但在过程中调用基类函数: MyChild.prototype.MySuperFunction = function (arg1, arg2) { MyBase.MySuperFunction(arg1); // THIS LINE IS THE LINE I DONT […]

我怎样才能只保留匹配一定条件的数组的项目?

我有一个数组,我想过滤它只包括符合一定条件的项目。 这可以在JavaScript中完成吗? 一些例子: [1, 2, 3, 4, 5, 6, 7, 8] // I only want [2, 4, 6, 8], ie the even numbers ["This", "is", "an", "array", "with", "several", "strings", "making", "up", "a", "sentence."] // I only want words with 2 or fewer letters: ["is", "an", "up", "a"] [true, false, 4, 0, "abc", "", "0"] […]

ES6模块:导出单个类的静态方法或多个单独的方法

我正在使用ECMAScript6模块。 从下面的选项中,从模块导出/导入多个方法的正确方法是什么? 单一类的静态方法: //—— myClass.js —— export default class myClass { static myMethod1() { console.log('foo'); } static myMethod2(args…) { console.log('bar'); } } //—— app.js —— import myClass from 'myClass'; myClass.myMethod1(); //foo 多个导出的方法: //—— myMethods.js —— export function myMethod1() { console.log('foo'); } export function myMethod2() { console.log('bar'); } //—— app.js —— import {myMethod1, myMethod2} from 'myMethods'; […]

为什么不能内联调用res.json?

我有和expressjs应用程序,并在特定的路线我调用一个函数,通过调用res.json与数据库文件作为参数与数据库中的用户响应。 我使用基于承诺的库,我想内联的callback,我把数据库文件的响应。 但是当我这样做的时候程序就会失败。 有人可以解释为什么吗? 我也想知道为什么内联调用console.log实际上工作。 两个方法res.json和console.log之间有一些根本的区别吗? 这是一个什么工作,什么不工作的例子。 假设getUserFromDatabase()返回用户文档的承诺。 //This works var getUser = function(req, res) { getUserFromDatabase().then(function(doc) { res.json(doc); }); } //This does not work (the server never responds to the request) var getUserInline = function(req, res) { getUserFromDatabase().then(res.json); } //This works (the object is printed to the console) var printUser = function(req, res) { […]

当在()上使用jQuery时,为什么使用(document)与元素本身?

我想用一个jQuery专家用自己的话来解释为什么$(document)标识符被其他人推荐用于jQuery的on()语句,而不是仅仅使用一个元素本身 例1:为什么在这里使用$(document)比例2更好? $(document).on("click", ".areaCodeList a", function(){ // do stuff }); 示例2:考虑到与示例1相比不太好的做法,为什么以这种方式使用元素? $(".areaCodeList a").on("click", function(){ // do stuff });

将PHPvariables传递给Javascript的最佳方式是什么?

我目前在隐藏的input字段中回显某些variables,并在需要时用Javascript读出它们。 我和一个同事现在正在考虑用PHP生成一个额外的Javascript文件,其中只包含所有的Javascriptvariables。 这样,variables已经存在,并且在HTML中没有额外的代码。 将variables从PHP传递给Javascript的好方法是什么? 我们的解决scheme听起来如何?