您认为每个程序员应该知道哪些JavaScript的"隐藏功能"?
在看到以下问题的答案的优秀质量后,我认为是时候向它询问JavaScript了.
虽然JavaScript现在可以说是最重要的客户端语言(只是问谷歌)但令人惊讶的是,大多数网络开发人员都很少理解它的实力.
在JavaScript中声明本地(内部)函数时,有两个选项:
使用var关键字声明,分配给变量:
(function() {
var innerFunction1 = function() { ... };
innerFunction1();
}());
Run Code Online (Sandbox Code Playgroud)
仅使用function关键字声明,而不指定给变量:
(function() {
function innerFunction2() { ... };
innerFunction2();
}());
Run Code Online (Sandbox Code Playgroud)
我可以看到第二个的一个优点:函数可以在调用它的代码下面声明,因此更容易将私有函数与实际执行的代码分开.
哪个更好,为什么?
我已经阅读了关于循环内的闭包和闭包的一些解释.我很难理解这个概念.我有这样的代码:有没有办法尽可能地减少代码,因此闭包的概念可以更清晰.我很难理解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代码片段吗?如果不是,有人可以概述一下它们是什么吗?
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) 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) 我刚刚了解了函数声明和函数表达式之间的区别.这让我想知道我是否在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
当我尝试在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中检测重复的功能(在某些情况下可能会意外写入)?在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)
我的问题最容易解释为代码块和它下面的问题.
但这是试图用英语解释我的问题:
我正在学习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 ×8
closures ×2
function ×2
typescript ×2
declaration ×1
iife ×1
loops ×1
scope ×1
web ×1