上官元恒 发布的文章

关于for中循环条件的写法

一般情况下,我们写for是这么写的

      
for($i = 0; $i < count($test); $i++)
{
	echo $i . ' ';
}


为了测试我们创建一个Countable类 


至于什么是Countable,自已看文档

class ForTest implements \Countable
{
	private $array = [1, 2, 3, 4, 5, 6];
	
	public function count()
	{
		echo 'count ';
		
		return count($this->array);
	}
}


 一般方法:

$test = new ForTest;
for($i = 0; $i < count($test); $i++)
{
	echo $i . ' ';
}



 输出如下: 
count 0 count 1 count 2 count 3 count 4 count 5 count

再试另一种方法

$test = new ForTest;
for($i = 0, $count = count($test); $i < $count; $i++)
{
	echo $i . ' ';
}


 输出如下: 
count 0 1 2 3 4 5

 结论很明显,可以看出,第一种方法调用了6次count,而第二种只调用了1次。


注释改键法

在写程序的注释时,经常遇到中英文切换问题

如://这是注释

'//'是英文,'这是注释'是中文。

默认中文输入法下,按'/'键打出的是顿号(、)。

我们需要通过改键使得 中文输入法下,按'/'键打出的是'/'。

以搜狗输入法为例:

打开属性设置-》常用-》自定义标点设置

1.png

将中文半角的'、'改为'/'

2.png

保存即可


下次输入注释时,切换到中文输入法状态,按'/'键输出的是'/'了

ES6 中 Arrow Function 的 this 作用域

<script>

var array = [1,21,31,456,6,52,3,41];
//数组的最大值:ES5
Array.prototype.max = function()
{
console.log(this);//array
return Math.max.apply(Math,this);
};
console.log('max',array.max());
//数组的最大值:ES6
Array.prototype.max = () =>
{
console.log(this);//window
return Math.max.apply(Math,this);
};
console.log('max',array.max());

</script>


一开始不能理解,为什么Arrow Function里的`this`指代`window`对象,

后来google了一番,

发现

`function()`里的`this`是在调用该方法确认的,

而,Arrow Function里的`this`是在运行脚本时确认的。

 

在`array.max()`调用时`this`才指代为array,

而,Arrow Function里的`this`是在脚本执行到时就已经指代了this为它的父级`window`。