Я думаю о лучшем, которое я могу сделать, дают Вам набор примеров для изучения. Программисты JavaScript практически оцениваются тем, как хорошо они понимают объем. Это может время от времени быть довольно парадоксально.
А глобально ограниченная по объему переменная
// global scope
var a = 1;
function one() {
alert(a); // alerts '1'
}
Локальный объем
// global scope
var a = 1;
function two(a) { // passing (a) makes it local scope
alert(a); // alerts the given argument, not the global value of '1'
}
// local scope again
function three() {
var a = 3;
alert(a); // alerts '3'
}
Промежуточное звено : Никакая такая вещь как область действия блока в JavaScript (ES5; ES6 представляет let
)
a.
var a = 1;
function four() {
if (true) {
var a = 4;
}
alert(a); // alerts '4', not the global value of '1'
}
b.
var a = 1;
function one() {
if (true) {
let a = 4;
}
alert(a); // alerts '1' because the 'let' keyword uses block scoping
}
Промежуточное звено : Свойства объектов
var a = 1;
function Five() {
this.a = 5;
}
alert(new Five().a); // alerts '5'
Усовершенствованный : Закрытие
var a = 1;
var six = (function() {
var a = 6;
return function() {
// JavaScript "closure" means I have access to 'a' in here,
// because it is defined in the function in which I was defined.
alert(a); // alerts '6'
};
})();
Усовершенствованный : Основанное на прототипе разрешение объема
var a = 1;
function seven() {
this.a = 7;
}
// [object].prototype.property loses to
// [object].property in the lookup chain. For example...
// Won't get reached, because 'a' is set in the constructor above.
seven.prototype.a = -1;
// Will get reached, even though 'b' is NOT set in the constructor.
seven.prototype.b = 8;
alert(new seven().a); // alerts '7'
alert(new seven().b); // alerts '8'
Global+Local: дополнительный сложный Случай
var x = 5;
(function () {
console.log(x);
var x = 10;
console.log(x);
})();
Это распечатает undefined
и 10
, а не 5
и 10
, так как JavaScript всегда перемещает объявления переменной (не инициализации) к вершине объема, делая код эквивалентным:
var x = 5;
(function () {
var x;
console.log(x);
x = 10;
console.log(x);
})();
Выгода ограниченная по объему пунктом переменная
var e = 5;
console.log(e);
try {
throw 6;
} catch (e) {
console.log(e);
}
console.log(e);
Это распечатает 5
, 6
, 5
. В тенях пункта e
выгоды глобальные и локальные переменные. Но этот специальный объем только для пойманной переменной. Если Вы пишете var f;
внутренняя часть пункт выгоды, то это - точно то же, как будто Вы определили его прежде или после блока try-catch.
Называть это устаревшей технологией - это больше точное описание.
http://msdn.microsoft.com/en-us/library/72x4h507%28VS.85%29.aspx
Этот раздел относится к устаревшим технология, которая сохраняется для обратная совместимость с существующими приложения и не рекомендуется для новой разработки. Распространено приложения теперь должны быть разработаны с помощью Windows Communication Foundation (WCF).
Обновление: WCF не делает различий между внутренними / внутренними / процессными / внутренними / внутренними доменами приложений. Если вы используете связь на одной машине в WCF, вы используете именованные каналы - их использование должно обеспечить хорошую производительность практически во всех реалистичных сценариях.
Для сравнения производительности различных технологий распределенной связи см. Здесь .
Да. Удаленное взаимодействие устарело ... и официально от Microsoft. Вот ссылка:
В первой строке статьи выделено жирным шрифтом:
Эта тема относится к устаревшей технологии, которая сохраняется для обратной совместимости с существующими приложениями и не является рекомендуется для новой разработки. Распределенные приложения теперь должны разрабатываться с использованием Windows Communication Foundation (WCF).
Я думал, что это словоблудие «устарело», но, очевидно, они называют его «устаревшим»
Клеменс Вастерс, технический руководитель Microsoft .NET Service Bus (что означает как удаленное взаимодействие, так и WCF), рассказывает о WCF и удаленном взаимодействии в этом сообщении на форуме . Подводя итог публикации, он в конечном итоге рекомендует WCF вместо удаленного взаимодействия.
Я не уверен, использует ли .NET 4.0 внутреннее удаленное взаимодействие, но вы можете попробовать отправить Клеменсу вопрос ... Я уверен, что он знает ответ.