Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Жаль только, что вложенность тегов не повторяется.Обычно, когда верстаю, элементы складываю на один уровень вложенности. Если нужен второй, создаю новый блок. Делал плагин исходя из такой иерархии.
<div class="foo__bar_baz js-foo__bar_baz" />
Сначала я тоже хотел сделать опции в виде хеша, но потом передумал в пользу отдельных методов, поскольку это выразительнее и гибче
# config.yaml
brace: ['newline']
ignore: ['js-.*']
flat: true
indent: 'tabs'
inner: true
line: true
// project1.js
var options = Object.mixin({
tag: 'true',
ignore: ['foo']
}, options);
new Autoclasscss(options);
// project2.js
var options = Object.mixin({
ignore: ['bar', 'js-*']
}, options);
new Autoclasscss(options);
ignore добавляет игнорируемые классы, а не полностью переопределяет заданный ранее список.return (function() {
return new Autoclasscss().tag(true).flat(false);
})();
require('autoclasscss').tag(false).set('<html>').get();
var __global__ = typeof global !== 'undefined' ? global : function (object) {
return object;
}(this);
(0,eval)('this')Function ('return this')();
Function(/*body*/) — это форма eval1. Не будьте так категоричны
2. Function(/*body*/) — это форма eval
3. Сжимальщику иногда нужно помогать.
(function(global) {
//..
}).call(this);
global у вас будет undefined.'use strict';
(function () {
alert(this);
}).call(this);
!function () { 'use strict';
(function () {
alert(this);
}).call(this); }()
Просто так не нужно писать, тем более для таких простых вещей как получение ссылки на глобальный объект.Расскажите этим ребятам github.com/knockout/knockout/blob/master/build/fragments/extern-pre.js#L4
единственная форма динамического исполнения кода, которая допустима в строгом режиме.Вот врать-то зачем?
eval прекрасно работает в strict mode.Вот врать-то зачем? eval прекрасно работает в strict mode.
The eval code cannot instantiate variable or function bindings in the variable environment of the calling context that invoked the eval if either the code of the calling context or the eval code is strict code. Instead such bindings are instantiated in a new VariableEnvironment that is only accessible to the eval code.
(0,eval)('this')
(function eval () {
'use strict';
alert(this);
})();
eval сделали безопаснее, об этом и речь в приведенной цитате. Т.е. все что происходит внутри eval — остается внутри eval.(function() {
'use strict';
eval('var x = 1;');
alert(x); // Uncaught ReferenceError: x is not defined
}());
this.x = 1;(function() {
'use strict';
eval('this.x = 1;');
alert(x); // 1
}.call(this)); //нужно, т.к. иначе в strict mode this будет undefined.
Function('var x = 1;')()
Всегда работает аналогично eval'у в strict mode.(function () {
'use strict';
alert(Function('return this')());
})();
Functions that are created with the Function constructor are strict only if they start with a Use Strict Directive, they don't «inherit» the strictness of the current context as Function Declarations or Function Expressions do
Function, в отношении объявления переменных всегда работает аналогично eval'у в strict mode."<header class="page">
<span class="page__element">
</header>
.page {
}
.page__element {
}
.page {
width: 100px;
}
.page__element {
color: red;
}
<header class="page">
<span class="page__element page__element_gren">
</header>
.page {
width: 100px;
}
.page__element {
color: red;
}
.page__element_gren {
}
.page {
}
.page__element {
}
.page__element_gren {
}
AutoclassCSS — быстрый каркас на основе HTML