Tôi đã đoạn mã sau vào tập tin HTML của tôi:Tại sao chức năng được gọi? JavaScript/Window
<script type="text/javascript">
window.never = function() {
console.log('this function is never called');
}
(function(d, s, id){
var js, srjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "this.script.does.not.exist.js";
srjs.parentNode.insertBefore(js, srjs);
}(document, 'script', 'streamrail-jssdk'));
</script>
Xem fiddle: http://jsfiddle.net/sebvaeja/
Nhìn vào giao diện điều khiển, bạn có thể thấy rằng window.never
chức năng là thực sự gọi là ('chức năng này là không bao giờ được gọi là 'được ghi vào bàn điều khiển).
Khi gỡ lỗi này bằng các công cụ dành cho Chrome, tôi thấy trong ngăn xếp cuộc gọi mà người gọi đã đóng (dòng đầu tiên: http://jsfiddle.net/sebvaeja/
).
Nếu tôi thay đổi không bao giờ hoạt động để được ra khỏi phạm vi toàn cầu:
function never() {
console.log('this function is never called');
}
Sau đó, nó không được gọi.
Ai đó có thể giải thích tại sao hàm window.never được gọi? Điều gì đang kích hoạt cuộc gọi? Tôi đoán nó có một cái gì đó để làm với các chức năng được trên đối tượng cửa sổ, nhưng tôi không thể thấy lý do đằng sau đó.
Nói một cách đơn giản, bạn có lỗi cú pháp. :) – isherwood
Ngoài ra đây là một bản sao nhưng tôi không thể tìm thấy nó. –
'var log = function() {console.log ('hàm này được gọi là'); } (42) ' –