Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
(function() {
…
})();
(function() {
var sharedVar = 0;
$('a').click(function() {
alert(sharedVar);
sharedVar = 12;
});
$('a').dblclick(function() {
alert(sharedVar);
sharedVar = 25;
});
})();
alert(typeof sharedVar); //undefined
!function () {
// source
}();
+function () {
// source
}();
[function() {
// source
}()];
function () {
// source
}()42 * function () {
// source
}();
function () {
// source
}function blabla() {
// source
}function () {
// source
}()В этом случае мы получаем SyntaxError из-за отсутствия имени функции (функция-декларация всегда должна иметь имя).
function foo() {
// source
}()Во втором случае имя задано (foo), и по идее, декларация функции должна пройти нормально. Однако, мы всё равно имеем ошибку синтаксиса, но уже, касаемо оператора группировки без выражения внутри. Обратите внимание, в данном случае — это именно оператор группировки, который следует за декларацией функции, а не скобки вызова функции!
function DoOneThing(){
...
}
function DoOtherThing(){
...
}
(function f(name,cb){
$('<button/>')
.appendTo('#container')
.addClass('commonClass')
.text(name)
.click(cb);
return f;})('Одна',DoOneThing)('Вторая',DoOtherThing);
setTimeout(function() {
alert("Бум!!!");
}, 200);/**
* Invoke method of object by name
*
* @param {string} methodName Method name to invoke.
* @param {array} params Arguments array.
*/
function invoke(methodName, params) {
var arr = methodName.split('.');
var parent = ((function () { return this; }).call(null)); // get global context
var funcName = arr.pop();
for(var i = 0; i < arr.length; i++) {
parent = parent[arr[i]];
}
return parent[funcName].apply(parent, params);
}
// Example
var obj = {};
obj.foo = {};
obj.foo.bar = function(a, b) {
return 'bar ' + (a + b);
}
alert(invoke('obj.foo.bar', [1, 2]));
Как корректно передавать js-команды с параметрами в ajax приложениях без возни с кавычками?
setTimeout(alert.bind(window, 'boom'), 200)actions = [...];
setTimeout(function() {
i = 0;
return function() {
actions[i](); i++;
if(i < actions.length)
setTimeout(arguments.callee , 200);
}
}(), 200)
(function(window, undefined) {
...
})(window);
(function(a){ a.do.something(); })(window);>>> false = true Unhandled exception: Cannot assign to 'false' >>> undefuned = 'foo' "foo"
(function(window, undefined) {
...
})(window);(function(window, undefined) {
window.a = 1;
window.b = 2;
if (window.c === undefined) {
window.d = {
x: undefined
};
}
})(window);
(function(a,b){a.a=1;a.b=2;if(a.c===b)a.d={x:b}})(window);Для чего передавать window я не знаю
console.log(window);
(function(window){
window = 'a';
console.log(window);
})(window);
console.log(window);
не меняется.
window.jQuery = window.$ = jQuery;window = 'wtf with window???'a === void(0)const Point2D = new StructType({ x: uint32, y: uint32 });
const Color = new StructType({ r: uint8, g: uint8, b: uint8 });
const Pixel = new StructType({ point: Point2D, color: Color });
const Triangle = new ArrayType(Pixel, 3);
let t = new Triangle([{ point: { x: 0, y: 0 }, color: { r: 255, g: 255, b: 255 } },
{ point: { x: 5, y: 5 }, color: { r: 128, g: 0, b: 0 } },
{ point: { x: 10, y: 0 }, color: { r: 0, g: 0, b: 128 } }]);
if ($.browser.msie && parseInt($.browser.version, 10)) {
event.pageY = event.pageY - 32
}var primer = function (){
var a, b, c, d, e = {};
smth(function () {
a = 1;
b = 2;
c = 3;
d = 4;
}, e);
alert([a, b, c, d, e.pewpew]);
},
smth = function (callback, e) {
callback();
e.pewpew = "pewpew";
};
primer();
Думал вообще говоря о другом, эти Ваши варианты понятны.
var primer = function (){
// в теле данной функции до следующей строчки ВООБЩЕ НИЧЕГО НЕТ, не написано
Unbelievable_Function_For_Instancing_Of_Our_Variables();
// функция инициализировала 100500 переменных внутри функции primer,
// например переменную This_Is_Awsome_Variable, для которой раньше
// не было дано определения через var
// но которая теперь есть, и она не из глобальной области
// и теперь мы можем делать так:
This_Is_Awsome_Variable = 'ПиуПиу';
// не опасаясь, что она из глобалов.
/// PROFIT !!!
}
* This source code was highlighted with Source Code Highlighter.var test = function(){
var a = 1;
var s = 2;
return a, s;
}
var tester = function(){
test();
alert(a);
alert(s);
}
tester();
* This source code was highlighted with Source Code Highlighter.так чтобы браузер после этого не выполнял прокрутку окна
Можно ли перехватывать события нажатия клавиш клавиатуры (стрелка вниз, вверх) в javascript, так чтобы браузер после этого не выполнял прокрутку окна?Для этого необходимо отменить, так называемое действие по умолчанию(Default Action): стрелка вниз и колесо мыши скролит окно, правая кнопка мыши поднимает контекстное меню, по клику на sumbit выполняется
form.submit(), при клике на input он получит фокус, при клике на анкор браузер перейдет по ссылке и т.д.// ИЕ и сафари не отслеживает стрелки на keypress, а Опера глючит на keyup
$(window).bind($.browser.opera ? 'keypress' : 'keyup', function (event) {
event.preventDefault();
// или
return false;
});preventDefault() до того, как выполнится defaultAction. Например при клике на input мы не хотим передавать ему фокус, тогда надо повесить обработчик на событие в цепочке до выполнения defaultAction — mousedown. // ИЕ и сафари не отслеживает стрелки на keypress, а Опера глючит на keyup
$('input').bind('mousedown', function (event) {
event.preventDefault();
// или
return false;
});var Human = function() {
this.walk = function() {}
}
var Man = function() {}
var Woman = function() {}
Здравствуйте, очень бы хотелось узнать про работу с файловой системой через JavaScript, например читать и писать в файлы. В большинстве учебников описывается JavaScript для браузеров, где работа с файлами не нужна, но например в серверном приложении или например в XUL- это необходимость, но документации крайне мало, если вообще она есть.
Привет. В рамках поста из темы и ликвидации безграмотности хочу задать свой вопрос.
Можно ли перехватывать события нажатия клавиш клавиатуры (стрелка вниз, вверх) в javascript, так чтобы браузер после этого не выполнял прокрутку окна? Есть ли особенности среди браузеров в таком поведении, если оно вообще возможно?
Например есть таблица, которая не влазит на экран целиком, при этом перемещение по строкам реализовано с помощью стрелок клавиатуры. Нужно, чтобы браузер не пролистывал при этом страницу.
С уважением к вам и вашему времени
День добрый,
ну раз уж написал, задавайте вопросы по JavaScript, то ловите:
GOTO в Javascript.
Собственно вопрос как повторить поведение goto в JavaScript.
(Про хороший стиль и goto рассказывать не нужно :) речь идёт про генерированный код. и восстановление блоков и циклов процесс весьма не тривиальный)
// не подходит, т.к. явное указание
var global = GLOBALS || window;
// Не подходит, т.к. не сработает в strict-mode.
var global = function () { return this; }();
(function(){
"use strict";
var globalObject = (0, eval)("this"); // Магия :)
return globalObject;
}());P.S. А на мой вопрос по канвасу так и не ответили (((
Мне было бы очень интересно послушать про типовые реализации основного функционала canvas-библиотек, таких как: эмуляция слоев, определение активного элемента (на котором в данный момент находится курсор), создание системы управления событиями и т. д.
$('#smth').click(function(e){
//прервать событие
e.preventDefault();
// передать левому объекту
leftObject.setSomeEvent(e);
})
// а затем внутри того "левого объекта" запустить начальное событие со всеми его свойствами и т.п.
$('#smth').click(function onSmthClick(event){
//прервать событие
event.preventDefault();
// Прописать обработчик
event.handlerFunction = onSmthClick;
event.handlerContext = this;
// передать левому объекту
// теперь otherObjectSetSomeEvent может использовать event.handlerFunction и вызывать обработчик
otherObjectSetSomeEvent(event);
});Но это не удачное решение, т.к. придется ещё много чего лишнего накрутить. И логика получается очень запутанная.$('#smth').click(function handler1(event){
//прервать событие
event.preventDefault();
// передать левому объекту
leftObjectSetSomeEvent(event, function handler2(e) {
// делаем что-нибудь с event или e
});
});
function leftObjectSetSomeEvent(event, callback) {
callback(event);
// делаем что-нибудь с event
}curAnim. Необходимую информацию удалось извлечь из fx.end.// our constructor
function Person(name, age){
this.name = name;
this.age = age;
};
// prototype assignment
Person.prototype = new function(){
// we have a scope for private stuff
// created once and not for every instance
function toString(){
return this.name + " is " + this.age;
};
// create the prototype and return them
this.constructor = Person;
this._protectedMethod = function (){
// act here
};
this.publicMethod = function() {
this._protectedMethod();
};
// "magic" toString method
this.toString = function(){
// call private toString method
return toString.call(this);
}
};
var Module = (function (window) {
function privateFunction() {
console.log('pass');
};
var privateClass = function () {};
var publicClass = function () {};
publicClass.prototype.publicMethod = function () {
privateFunction(); // ...
};
return { // Экспортируем
publicClass: publicClass
};
}(this));
// Используем
(new Module.publicClass()).publicMethod();
function anExampleFunctionWithLongDescriptiveName() { ... }
anExampleFunctionWithLongDescriptiveName.public = true;
anExampleFunctionWithLongDescriptiveName.args = {first: String, second: Object}
anExampleFunctionWithLongDescriptiveName.comment = "An example public function.";@public
@args({first: String, second: Object})
@comment("An example public function.")
function anExampleFunctionWithLongDescriptiveName() { ... }The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied.
function xhr(m,u,c,p,l,s,x){
with(new(this.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP"))
onreadystatechange=function(x){readyState^4||c(x)},open(m,u,false,l,s),send(p)
}
// Использование
xhr('get', 'http://path.to/server?with=parameters', function (xhr) {
alert(xhr.status + ':' + xhr.responceText);
}, null, "username", "password");
"use strict" все значительно проще:var Obj = function () {
"use strict";
this.pew = 100;
};
// Правильно
new Obj.pew++;
// пользователь словит ошибку
Obj(); // TypeError: this is undefined
require('pewpew.js', function () {
new Pewpew();
});
/** #require('pewpew.js') */
new Pewpew();
// Препроцессор переделает этот код в какой-то такой вид:
/* pewpew.js */
var Pewpew = function () {};
// остальной код Pewpew...
new Pewpew();
foo.js:
exports.Foo = чонить;
bar.js:
exports.Bar = чонить;
main.js:
var foo = require('foo');
var Bar = require('bar').Bar;
// foo.js
(function(exports){}
exports.Foo = чонить;
(typeof exports === "undefined" ? this : exports));
require('foo') не нужны// main.js
require('foo.js', 'bar.js', function () {
new Pewpew();
});// main.js
/** #require('foo.js') */
/** #require('bar.js') */
new Pewpew();// main.js
(function(exports){}
exports.Foo = чонить;
(typeof exports === "undefined" ? this : exports));
(function(exports){}
exports.Bar = чонить;
(typeof exports === "undefined" ? this : exports));
new Pewpew();
FAQ по JavaScript: задавайте вопросы