相关疑难解决方法(0)

JavaScript的隐藏功能?

您认为每个程序员应该知道哪些JavaScript的"隐藏功能"?

在看到以下问题的答案的优秀质量后,我认为是时候向它询问JavaScript了.

虽然JavaScript现在可以说是最重要的客户端语言(只是问谷歌)但令人惊讶的是,大多数网络开发人员都很少理解它的实力.

javascript hidden-features

312
推荐指数
68
解决办法
13万
查看次数

在JavaScript中定义本地函数:使用var还是不使用var?

在JavaScript中声明本地(内部)函数时,有两个选项:

使用var关键字声明,分配给变量:

(function() {
    var innerFunction1 = function() { ... };
    innerFunction1();
}());
Run Code Online (Sandbox Code Playgroud)

仅使用function关键字声明,而不指定给变量:

(function() {
    function innerFunction2() { ... };
    innerFunction2();
}());
Run Code Online (Sandbox Code Playgroud)

我可以看到第二个的一个优点:函数可以在调用它的代码下面声明,因此更容易将私有函数与实际执行的代码分开.

哪个更好,为什么

javascript closures declaration function

59
推荐指数
2
解决办法
3万
查看次数

请解释在循环中使用JavaScript闭包

我已经阅读了关于循环内的闭包和闭包的一些解释.我很难理解这个概念.我有这样的代码:有没有办法尽可能地减少代码,因此闭包的概念可以更清晰.我很难理解i两个括号内的部分.谢谢

function addLinks () {
    for (var i=0, link; i<5; i++) {

        link = document.createElement("a");
        link.innerHTML = "Link " + i;


        link.onclick = function (num) {
            return function () {
                alert(num);
            };
        }(i);
        document.body.appendChild(link);

    }
}
window.onload = addLinks;
Run Code Online (Sandbox Code Playgroud)

javascript closures scope loops

56
推荐指数
2
解决办法
3万
查看次数

JavaScript函数声明

下面给出了某些函数声明的JavaScript代码片段吗?如果不是,有人可以概述一下它们是什么吗?

some_func = function(value) {
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

show:function(value){
   // some code here
}
Run Code Online (Sandbox Code Playgroud)

javascript function-declaration

27
推荐指数
2
解决办法
2万
查看次数

在TypeScript中键入声明顺序

TypeScript对类型声明的顺序敏感吗?

更改类型的顺序会导致Angular 2(beta.0)中的错误,其中(AFAIK)是使用TypeScript本身实现的(这就是为什么这个错误看起来如此奇怪且与我无关):

angular2-polyfills.js:138 Error: Cannot read property 'prototype' of undefined(…)

假设我们有一个文件t1.ts:

export class AuthResponse extends JsonResponse { }
export class JsonResponse {
    public code: ResultCode;
}
export enum ResultCode { }
Run Code Online (Sandbox Code Playgroud)

启动应用程序时,我们会在客户端看到上述错误.但是如果我们在这个文件中颠倒声明的顺序,那么错误就会消失(只是为了记录,目前我正在向前推进,记住它并且它有效).

要重现此错误,我们还需要五个文件:

t2.ts:

import {AuthResponse, JsonResponse, ResultCode} from './t1'; // this order?

export class DummyAction {
    doSomething() {
        console.log('test, starting ...');

        var v = new AuthResponse();
        return v;
    }
}
Run Code Online (Sandbox Code Playgroud)

app.component.ts:

import {Component, OnInit} from 'angular2/core';
import {DummyAction} from './components/t2';            

@Component({      
    selector: 'root-app',
    templateUrl: …
Run Code Online (Sandbox Code Playgroud)

typescript

18
推荐指数
2
解决办法
2405
查看次数

模块模式中的函数声明与函数表达

我刚刚了解了函数声明和函数表达式之间的区别.这让我想知道我是否在AngularJS代码中做得对.我正在遵循John Papa使用的模式,但现在它似乎与模块模式的典型JS方法不一致.John Papa在他的控制器和服务中大量使用嵌套的函数声明.这不好吗?

有没有理由支持这个:

var foo = (function() {
    var bar = function() { /* do stuff */ };
    return {
       bar : bar
    };
}());

foo.bar();
Run Code Online (Sandbox Code Playgroud)

对此:

var foo = (function() {
    return {
       bar : bar
    };

    function bar() { /* do stuff */ };
}());

foo.bar();
Run Code Online (Sandbox Code Playgroud)

我主要是一名C#开发人员,仍然习惯于JavaScript的所有细微差别.我更喜欢后一种方法,因为IIFE中的所有功能都是私有的,顶部的揭示模块模式实际上是公共部分.在C#类中,我总是在私有支持函数之前拥有我的公共属性和方法.但是,我意识到它在JS世界中可能不那么干脆.

使用后一种方法有哪些隐患(如果有的话)?

javascript module-pattern function-declaration function-expression iife

6
推荐指数
1
解决办法
736
查看次数

TypeScript:TypeError b未定义

当我尝试在TypeScript中创建继承时,会生成以下JavaScript:

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
Run Code Online (Sandbox Code Playgroud)

它看起来与应该生成的完全一样.但问题是执行时Firefox会给出以下消息:

TypeError: b is undefined
Run Code Online (Sandbox Code Playgroud)

在Chrome中,错误看起来有点不同,但似乎是相同的来源:

Uncaught TypeError: Cannot read property 'prototype' of undefined
Run Code Online (Sandbox Code Playgroud)

打字稿中的实现看起来像这样

class Movie extends Medium {
//Some Fields
    constructor(title: string, description: string, ageRestriction: AgeRestriction, isBluRay: boolean) {
        super(title, description, ageRestriction);
        this.isBluRay = isBluRay; …
Run Code Online (Sandbox Code Playgroud)

javascript web typescript visual-studio-2015

6
推荐指数
1
解决办法
7183
查看次数

在Javascript中识别重复的函数

是否有可能在Javascript中检测重复的功能(在某些情况下可能会意外写入)?在Google Chrome中,

printLah(); //this prints "Haha" for some reason, without even printing an error message in the Javascript console!
function printLah(){
    alert("Hahah!");
}


function printLah(){
    alert("Haha");
}
Run Code Online (Sandbox Code Playgroud)

这是JSfiddle.

javascript

3
推荐指数
1
解决办法
5051
查看次数

javascript中的函数 - 定义和调用它们,有或没有函数名称

我的问题最容易解释为代码块和它下面的问题.

但这是试图用英语解释我的问题:

我正在学习JavaScript(而且我很懒,所以我使用了很多jQuery ...;))我遇到了一些我不太了解的东西,我不知道它叫什么,所以我不喜欢我知道应该研究什么术语.

基本上我想知道何时需要使用function(){ ... }(没有名称)以及何时使用function function_name(){ ... }(带有名称),以及如何使用.click() .post()或等执行函数setTimeout().

我知道一些jQuery函数,比如.click()需要你输入一个函数来调用.但问题是,你不能只说.click( function_name() )(如果我正确地解释了我的测试结果,这将在执行脚本时立即调用该函数)而不是你必须做.click( function(){ ... })或你可以做.click( function function_name(){ ... }).我还发现.click( function_name )只要事先定义就可以说,var function_name = function function_name(){ ... }而函数名是可选的,无论是否添加它都可以.

我举了一个例子,说明了我能想到的所有可能情况.我确实找到了什么工作,什么不工作,现在我想找出为什么每个人都在工作而其他人没有工作.

我希望理解这将有助于我更好地理解异步函数,如.post()setTimeout().

<button id="one">Button 1</button>
<button id="two">Button 2</button>
<button id="three">Button 3</button>
<button id="four">Button 4</button>
<button id="five">Button 5</button>
<button id="six">Button 6</button>
<button id="seven">Button 7</button>
<button id="eight">Button 8</button>
<button …
Run Code Online (Sandbox Code Playgroud)

javascript function function-calls

3
推荐指数
1
解决办法
4439
查看次数