BFC 就是块级格式上下文,是页面盒模型布局中的一种 CSS 渲染模式,相当于一个独立的容器,里面的元素和外部的元素相互不影响。
因为vue设计是单向数据流,数据的流动方向只能是自上往下的方向;但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。额外的,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
在initProps的时候,在defineReactive时通过判断是否在开发环境,如果是开发环境,会在触发set的时候判断是否此key是否处于updatingChildren中被修改,如果不是,说明此修改来自子组件,触发warning提示。
需要特别注意的是,当你从子组件修改的prop属于基础类型时会触发提示。 这种情况下,你是无法修改父组件的数据源的, 因为基础类型赋值时是值拷贝。你直接将另一个非基础类型(Object, array)赋值到此key时也会触发提示(但实际上不会影响父组件的数据源), 当你修改object的属性时不会触发提示,并且会修改父组件数据源的数据。
// promise
const sleep = time => {
return new Promise(resolve => setTimeout(resolve, time))
}
sleep(1000).then(() => {
console.log(‘业务代码‘)
})
// async/await
const sleepPromise = (time) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
})
}
async function sleep (time) {
await sleepPromise(time);
console.log(‘业务代码‘)
}
sleep(5000)
// generator
const sleepPromise = (time) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
})
}
function* sleep(time) {
yield sleepPromise(time);
}
sleep(5000).next().value.then(()=>{
console.log(‘业务代码‘)
})
function sleep(delay) {
var start = (new Date()).getTime();
while ((new Date()).getTime() - start < delay) {
continue;
}
}
console.log(‘1‘)
sleep(5000)
console.log(‘2‘)
function sleep(time, callback) {
setTimeout(callback, time)
}
sleep(time, () => {
console.log(‘业务代码‘)
})
Number.prototype.add = function (number) {
if (typeof number !== ‘number‘) {
throw new Error(‘请输入数字~‘);
}
return this.valueOf() + number;
};
Number.prototype.minus = function (number) {
if (typeof number !== ‘number‘) {
throw new Error(‘请输入数字~‘);
}
return this.valueOf() - number;
};
console.log((5).add(3).minus(2));
// 这里的~写成加号+ 减号- 都可以。但必须是一元表达式
// 匿名函数前面加~一元运算符就会转变成函数表达式,函数表达式后面加()
~ function(){
function add(n){
return this + n
}
function minus(n){
return this - n
}
Number.prototype.add = add
Number.prototype.minus = minus
}()
console.log((5).add(3).minus(2))
function addmin(){
function add(n){
return this + n
}
function minus(n){
return this - n
}
Number.prototype.add = add
Number.prototype.minus = minus
}
addmin()
console.log((5).add(3).minus(2))
补充回答:Object.defineProperty 本身有一定的监控到数组下标变化的能力,但是在 Vue 中,从性能/体验的性价比考虑,尤大大就弃用了这个特性。
// 父元素
box {
display: flex;
justify-content: center;
align-items: center;
}
// 绝对定位
.div {
width: 200px;
height: 200px;
background: green;
position:absolute;
left:0;
top: 0;
bottom: 0;
right: 0;
margin: auto;
}
// margin 负间距
div {
width:200px;
height: 200px;
background:green;
position: absolute;
left:50%;
top:50%;
margin-left:-100px;
margin-top:-100px;
}
// transform 变形
div {
width: 200px;
height: 200px;
background: green;
position:absolute;
left:50%; /* 定位父级的50% */
top:50%;
transform: translate(-50%,-50%); /*自己的50% */
}
var a = {n:1}
var b = a;
a.x = a = {n:2}
console.log(a.x) // undefined
console.log(b.x) // {n: 2}
考察运算符的优先级,虽然赋值是从右往左,但是.的运算符比=的优先级高。所以先执行a.x = {n: 2}再执行a = {n: 2}
var a = [11,2,55,123,88,3,67];
function bubbleSort(arr) {
console.time(‘time‘)
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]){
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
console.timeEnd(‘time‘)
console.log(arr)
return arr
}
bubbleSort(a)
var a = [11,2,55,123,88,3,67];
function bubbleSort1(arr) {
console.time(‘time‘)
var i = arr.length - 1;
while(i > 0) {
let pos = 0;
for (var j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
pos = j
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
i = pos
}
console.timeEnd(‘time‘)
console.log(arr)
return arr
}
bubbleSort1(a)
原文:https://www.cnblogs.com/jialuchun/p/15268119.html