2015-09-14 1 views
-1

В последнее время я заметил, что соглашение javascript смещается. Теперь, где бы я ни выглядел, я вижу, что другие разработчики, использующие javascript, обертывают свои функции в скобках, чтобы сделать их закрытыми (или что-то вроде этого, я не уверен, javascript для меня является второстепенным). Например ...Есть ли способ избежать инкапсуляции javascript в скобках, но все же получить преимущества?

(function something() 
    { // something happens here 
    })(); 

Как вещи (особенно дополнительные функции) получает вложенными, это отрицательно сказывается на читабельности кода, а на самом деле делает Javascript некрасиво и смотреть больше и больше похожи на кошмары программирования в LISP (как он получил это прозвище «Много идиотических одиночных круглых скобок»). Меня не волнует, если я должен набрать полное слово (или даже пару слов), чтобы получить тот же эффект. Есть ли хорошая альтернатива инкапсуляции в круглые скобки, чтобы сделать функцию частной и получить другие преимущества в скобках инкапсуляции?

Редактировать: По-видимому, я неправильно понял, что касается внешней круглой скобки, которую я задаю, что меня больше смущает их пурпур на самом деле.

+2

В зависимости от используемых вами инструментов ES6 имеет [хорошее решение] (https://github.com/ModuleLoader/es6-module-loader/wiki/Brief-Overview-of-ES6-Module-syntax) для это (аналогично модулям в Node.js) – nem035

+5

№. Единственный раз, когда это необходимо, это если у вас есть IIFE, и это два дополнительных параметра. Вы также можете просто определить функцию и выполнить ее позже. –

+1

* «Есть ли хорошая альтернатива инкапсуляции в круглые скобки, чтобы сделать частную функцию и получить другие преимущества инкапсуляции в скобках?» * - Это не скобка, которая делает инкапсуляцию. Это функция, которая делает это (через закрытие). Первая пара скобок только делает функцию выражением, и последняя пара выполняет ее. Следовательно, имя IIFE (выражение вызывается с немедленным вызовом). – Joseph

ответ

1
  • Вы можете определить регулярную функцию и вызвать его, когда вам это нужно

Пример

var myObject = { 
    something: function() { 
    }, 

    somethingElse: function() { 
    } 
}; 

myObject.something(); 
  • ES6/ES2015 теперь модули поддерживают

    //------ lib.js ------ 
    export const sqrt = Math.sqrt; 
    export function square(x) { 
        return x * x; 
    } 
    
    export function diag(x, y) { 
        return sqrt(square(x) + square(y)); 
    } 
    
    //------ main.js ------ 
    import { square, diag } from 'lib'; 
    console.log(square(11)); // 121 
    console.log(diag(4, 3)); // 5 
    

Вы можете прочитать больше о модулях here

1

No. (Delta ES6 модулей или другие расфасовки требуют подобных структур.)

Единственный раз, когда этот синтаксис необходим, если у вас есть IIFE, и это всего лишь два дополнительных parens (чтобы превратить функцию в выражение, которое может быть оценено, т. е. выполнено).

Вы также можете просто определить функцию и выполнить ее позже, например, вообще избегать IIFE).

+0

Где я пропустил лишний набор паремов в моем примере, если вы не возражаете, чтобы я спросил? – liljoshu

+0

@liljoshu Нет, я говорю, что это всего лишь два дополнительных parens, '()', чтобы сделать функцию в выражении, которое может быть выполнено. Это совсем не похоже на Лиспа. Отредактировано для уточнения. –

+0

huh, я думал, что это было два вокруг него, а два - за ним. Итак, для чего нужны другие паремы? – liljoshu

Смежные вопросы