2014-11-12 4 views
1

내가 차이점이 무엇인지 궁금했는데 : 나는 vtiger CRM 및 hifive에 사용되는 2 기능을 본 적이다른 자바 스크립트 함수 형식

  1. function getBasicRow() {}
  2. getBasicRow : function() {}

이 (http://www.htmlhifive.com/)

+2

두 번째 옵션은 유효하지 않습니다. – adeneo

+0

흥미로운 관련 질문 :'function getBasicRow() {}'과'var getBasicRow = function() {}'의 차이점은 무엇입니까? –

답변

3

두 번째 것은 일부 개체 리터럴의 속성에 함수를 할당하므로 functio의 범위 n은 속성에 의해 결정됩니다.

첫 번째 것은 명명 된 함수를 변수에 할당하지 않고 만듭니다. 이 기능은 가장 가까운 기능 범위로 끌어 올립니다.

+0

안녕하세요, 즉시 답장을 보내 주셔서 감사합니다. :) 나는 그것을 점검하고 함수를 만들려고 시도했다. – Ashenvale

1

나는 here을 발견했고 그것을 공유하고 싶다.

함수는 자바 스크립트에서 정의 할 수있는 다른 방법은 다음과 같습니다 정확히

function A(){};    // function declaration 
var B = function(){};  // function expression 
var C = (function(){});  // function expression with grouping operators 
var D = function foo(){}; // named function expression 
var E = (function(){  // immediately-invoked function expression (IIFE) that returns a function 
    return function(){} 
})(); 
var F = new Function();  // Function constructor 
var G = new function(){}; // special case: object constructor 

리프팅은 무엇입니까?

A(); 
function A(){ 
    console.log('foo'); 
}; 

이 코드로 실행 가져옵니다 :

이들에 대한 흥미로운 점은이 코드 의미 그들의 범위의 상단에 "게양"되어 있다는 점이다

function A(){ 
    console.log('foo'); 
}; 
A(); 

을 어느 실질적으로, 예, 코드에 작성되기 전에 함수를 호출 할 수 있다는 것을 의미합니다. 중요하지 않은 것은 전체 기능이 포함 된 스코프의 상단으로 끌어 올려지기 때문입니다.

변수 선언 리프팅 변수 선언은 다소 유사뿐만 아니라 게양되지 않은 변수의 내용을 제외하고 게양을 작동하려면, 해당 범위의 상단에 게양된다. 이것은 모든 변수에서 발생합니다. 즉, 이제 변수를 변수에 할당 할 것이므로 이제는 함수에서 발생하고 있습니다.

이 코드 :

var A = function(){}; 
var B = function(){}; 
var C = function(){}; 

이 같이 실행된다 :

var A, B, C; // variable declarations are hoisted 
A = function(){}; 
B = function(){}; 
C = function(){}; 

따라서 설정 및 기능의 종류를 호출하는 순서가 중요하다

// this works 
var B = function(){}; 
B(); 

// this doesn't work 
B2(); // TypeError (B2 is undefined) 
var B2 = function(){}; 

번째 예제에서는 변수 B2의 선언 만 올렸지 만 정의가 아니라는 이유로 오류가 발생합니다 우리에게 "정의되지 않은"오류가 발생했습니다.

씨 : 그것은 객체 리터럴의 일부를 제외 DavidBCalhoun

+0

안녕하세요. 공유해 주셔서 감사합니다. :) 당신이 올린 기사는 또한 간단하고 매우 유익합니다. – Ashenvale